Снятие скобок [ ] и запятая 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 Wilson WNC1105, ENC3250, REL2210

10 Braga ENC1105, ENC3250, ISO4250

20 Адамс WNC1105, ENC3250, REL2210

60 Giron COP1210, COP3337, COP3530

45 O'Neal ENC1105, ENC3250, REL2210

40 Ervin ENC1105, COP3250, ISO4250

70 Bourne COP2250, ENC3250, COP3530

[,,,,,,,,,]

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

[,,,,,,,,,]

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

3 ответа

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

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

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

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

Если вы не хотите видеть квадратные скобки при выводе списка ArrayList, тогда не просто используйте:

System.out.println(list);

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

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

Теперь нет квадратных скобок.

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

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() в классе Student. Вы должны возвращать данные в виде строки, а не отображать ее. Ваш метод 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

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

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

[,,,,,,,,,]

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

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, EN WNC1105, EN Giron COP1210, COP3337, COP3530, 45 O'Neal ENC1105, ENC3250, REL2210, 40 Ervin ENC1105, COP3250, ISO4250, 70 Bourne COP2250, ENC3250, COP3530]

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

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

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

50 Gracia COP2250, COP3250, COP4250

30 Jones COP1210, COP3337, COP3530

10 Смит COP2250, COP3250, COP4250

20 Wilson WNC1105, ENC3250, REL2210

10 Braga ENC1105, ENC3250, ISO4250

20 Адамс WNC1105, ENC3250, REL2210

60 Giron COP1210, COP3337, COP3530

45 O'Neal ENC1105, ENC3250, REL2210

40 Ervin ENC1105, COP3250, ISO4250

70 Bourne COP2250, ENC3250, COP3530

Другие вопросы по тегам