2017-01-21 8 views
0

Я пытаюсь отсортировать список по возрастанию по имени студента и отобразить список, но я хочу удалить [,], которые возвращают null. Есть ли способ, которым я не могу этого видеть.Снятие скобок [] и запятая Java

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class StudentTest { 

    public static void main(String args[]) { 
     List<Student> list = new ArrayList<Student>(); 



     list.add(new Student(" Gracia", "50","\tCOP2250, COP3250, COP4250")); 
     list.add(new Student(" Jones", "30", "\tCOP1210, COP3337, COP3530")); 
     list.add(new Student(" Smith", "10", "\tCOP2250, COP3250, COP4250")); 
     list.add(new Student(" Wilson", "20", "\tWNC1105, ENC3250, REL2210")); 
     list.add(new Student(" Braga", "10", "\tENC1105, ENC3250, ISO4250")); 
     list.add(new Student(" Adams", "20", "\tWNC1105, ENC3250, REL2210")); 
     list.add(new Student(" Giron", "60","\tCOP1210, COP3337, COP3530")); 
     list.add(new Student(" O'Neal", "45","\tENC1105, ENC3250, REL2210")); 
     list.add(new Student(" Ervin", "40", "\tENC1105, COP3250, ISO4250")); 
     list.add(new Student(" Bourne", "70","\tCOP2250, ENC3250, COP3530")); 


     System.out.println(list); 
     Collections.sort(list); 
     System.out.println(list); 

    } 
} 

class Student implements Comparable<Student> { 


    public Student(String name, String id, String course) { 
     this.name = name; 
     this.id = id; 
     this.course = course; 
    } 

    public String getName() { 

     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getCourse() { 
     return course; 
    } 


    public Student(String course) { 
     this.course = course; 
    } 

    private String name; 
    private String id; 
    private String course; 



    @Override 
    public int compareTo(Student student) { 

     return name.compareTo(student.name); 

    } 


    @Override 
    public String toString() { 


     System.out.println("" + id + name + course); 

     return ""; 

    } 
} 

Выход заключается в следующем:

10 Смит COP2250, COP3250, COP4250

20 Уилсон WNC1105, ENC3250, REL2210

10 Брага ENC1105, ENC3250, ISO4250

20 Adams WNC1105, ENC3250, REL2210

60 Гирон COP1210, COP3337, COP3530

45 О'Нил ENC1105, ENC3250, REL2210

40 Ирвин ENC1105, COP3250, ISO4250

70 Борна COP2250, ENC3250, COP3530

[, ,,,,,,,,,]

Почему я получаю эту строку?

[,,,,,,,,,]

Спасибо за вашу помощь!

+1

Просьба пояснить, что вы подразумеваете под * «Я хочу удалить [,], которые возвращают null" *. – lexicore

+0

Несомненно ... перебираем массив ** list ** правильно. Попробуйте использовать цикл ** для **. – DevilsHnd

+0

выход следующим образом: 20 Адамс \t WNC1105, ENC3250, REL2210 70 Борна \t COP2250, ENC3250, COP3530 10 Брага \t ENC1105, ENC3250, ISO4250 40 Ирвин \t ENC1105, COP3250, ISO4250 60 Гирон \t COP1210, COP3337, COP3530 50 Грация \t COP2250, COP3250, COP4250 30 Джонс \t COP1210, COP3337, COP3530 45 О'Нил \t ENC1105, ENC3250, REL2210 10 Смит \t COP2250, COP3250, COP4250 20 Уилсон \t WNC1105, ENC3250, RE L2210 [,,,,,,,,,] – Mario

ответ

0

Когда вы делаете System.out.println(list); Вы используете только по умолчанию метод ArrayList.toString(), который возвращает значения в списке в [] скобках, разделенных запятой и пробелом. У вас есть три варианта там:

  1. перебирать список по своему усмотрению и печати каждого студента в отдельности (до тех пор, как она есть, это реализация toString() метод

  2. Или вы можете использовать replaceAll() для. струнный у вас есть теперь от list.toString()

Первый вариант предпочтителен в целом, так как для общего случая "[" "]" ", " могут быть действительными символами внутри списка Elemen ts и не должны быть заменены. Но для малого случая, когда вы уверены, что таких символов не будет в Student name, id or course, вы можете это сделать.

0

Когда вы используете System.out.println(list), вы используете реализацию списка по умолчанию для печати чего-либо на консоли.

Реализация по умолчанию выполняется по вашему списку и вызывает toString каждого объекта. Было бы неплохо переопределить эту функцию в вашем классе Student. Но вы просто возвращаетесь ». Реализация по умолчанию создает новую строку. Он начинается с «[». За ним последует возвращаемое значение метода toString для каждого объекта внутри списка (разделяется на «,»). Он заканчивается символом «]». Метод toString возвращает пустую строку "".Это означает, что реализация по умолчанию будет создавать следующее:

[,,,,,,,,,]

Теперь Вы можете изменить возвращаемое значение вашего метода ToString:

public String toString() { 
    return "" + id + name + course ; 
} 

чем вы получите следующий результат:

[50 Gracia COP2250, COP3250, COP4250, 30 Jones COP1210, CO P3337, COP3530, 10 Smith COP2250, COP3250, COP4250, 20 Wilson WNC1105, ENC3250, REL2210, 10 Braga ENC1105, ENC3250, ISO4250, 20 Adams WNC1105, ENC3250, REL2210, 60 Giron COP1210, COP3337, COP3530, 45 O'Neal ENC1105, ENC3250, REL2210, 40 Эрвин ENC1105, COP3250, ISO4250, 70 Bourne COP2250, ENC3250, COP3530]

Если вы не хотите иметь commatars и кронштейны вы можете написать свой собственный список, который простирается от ArrayList, или вы перебираете свой список, а не печатаете его.

for(Student s : list){ 
     System.out.println(s); 
    } 

Тогда вы получите следующий результат:

50 Gracia COP2250, COP3250, COP4250

30 Jones COP1210, COP3337, COP3530

10 Smith COP2250, COP3250, COP4250

20 Wilson WNC1105, ENC3250, REL2210

10 Брага ENC1105, ENC3250, ISO4250

20 Адамс WNC1105, ENC3250, REL2210

60 Гирон COP1210, COP3337, COP3530

45 О'Нил ENC1105, ENC3250, REL2210

40 Эрвин ENC1105, COP3250, ISO4250

70 Bourne COP2250, ENC3250, COP3530

0

Если вы не хотите видеть квадратные скобки при включении вашего список ArrayList массив, то не просто использовать:

System.out.println(list); 

Вы должны перебирать массив таким образом, чтобы обработать каждый элемент массива в вы хотите, например:

for (int i = 0; i < list.size(); i++) { 
    System.out.println(list.get(i)); 
} 

В настоящее время нет квадратных скобок.

Ваш главный() метод код должен выглядеть примерно так:

public static void main(String args[]) { 
    List<Student> list = new ArrayList<>(); 

    list.add(new Student(" Gracia", "50", "\tCOP2250, COP3250, COP4250")); 
    list.add(new Student(" Jones", "30", "\tCOP1210, COP3337, COP3530")); 
    list.add(new Student(" Smith", "10", "\tCOP2250, COP3250, COP4250")); 
    list.add(new Student(" Wilson", "20", "\tWNC1105, ENC3250, REL2210")); 
    list.add(new Student(" Braga", "10", "\tENC1105, ENC3250, ISO4250")); 
    list.add(new Student(" Adams", "20", "\tWNC1105, ENC3250, REL2210")); 
    list.add(new Student(" Giron", "60", "\tCOP1210, COP3337, COP3530")); 
    list.add(new Student(" O'Neal", "45", "\tENC1105, ENC3250, REL2210")); 
    list.add(new Student(" Ervin", "40", "\tENC1105, COP3250, ISO4250")); 
    list.add(new Student(" Bourne", "70", "\tCOP2250, ENC3250, COP3530")); 

    for (int i = 0; i < list.size(); i++) { 
     System.out.println(list.get(i)); 
    } 

    Collections.sort(list); 

    System.out.println(""); 
    for (int i = 0; i < list.size(); i++) { 
     System.out.println(list.get(i)); 
    } 
} 

Теперь, как @Leon уже заявил в своем комментарии, вы настроили ваш ToString() метод неправильно в Студент класс. Вы должны возвращать данные как строку, а не отображать ее. Ваш ToString() метод должен выглядеть следующим образом:

@Override 
public String toString() { 
    return id + name + course; 
} 

И это должно заботиться о вещах. Ваш результат должен выглядеть так:

50 Gracia COP2250, COP3250, COP4250 
30 Jones COP1210, COP3337, COP3530 
10 Smith COP2250, COP3250, COP4250 
20 Wilson WNC1105, ENC3250, REL2210 
10 Braga ENC1105, ENC3250, ISO4250 
20 Adams WNC1105, ENC3250, REL2210 
60 Giron COP1210, COP3337, COP3530 
45 O'Neal ENC1105, ENC3250, REL2210 
40 Ervin ENC1105, COP3250, ISO4250 
70 Bourne COP2250, ENC3250, COP3530 

20 Adams WNC1105, ENC3250, REL2210 
70 Bourne COP2250, ENC3250, COP3530 
10 Braga ENC1105, ENC3250, ISO4250 
40 Ervin ENC1105, COP3250, ISO4250 
60 Giron COP1210, COP3337, COP3530 
50 Gracia COP2250, COP3250, COP4250 
30 Jones COP1210, COP3337, COP3530 
45 O'Neal ENC1105, ENC3250, REL2210 
10 Smith COP2250, COP3250, COP4250 
20 Wilson WNC1105, ENC3250, REL2210 
+0

Я знал, что мне нужен цикл for где-то просто не щелкал, я виню выходные! Еще раз спасибо, это работало удивительно прекрасно. – Mario