【问题标题】:Removing brackets [ ] and comma Java删除括号 [ ] 和逗号 Java
【发布时间】:2017-01-21 19:40:16
【问题描述】:

我正在尝试按学生姓氏升序对列表进行排序并显示列表,但我想删除返回 null 的 [, ]。有没有办法让我看不到。

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 亚当斯 WNC1105、ENC3250、REL2210

60 吉隆 COP1210、COP3337、COP3530

45 奥尼尔 ENC1105、ENC3250、REL2210

40 欧文 ENC1105、COP3250、ISO4250

70 伯恩 COP2250、ENC3250、COP3530

[, , , , , , , , , ]

为什么我会收到这条线?

[, , , , , , , , , ]

感谢您的帮助!

【问题讨论】:

  • 请澄清一下,“我想删除返回 null 的 [, ]”是什么意思
  • 当然...正确地遍历 list 数组。尝试使用 for 循环。
  • 输出如下:20 ADAMS WNC1105,ENC3250,REL2210 70 BOURNE COP2250,ENC3250,COP3530 10 BRAGA ENG1105,ENC3250,ENC3250,ISO4250,ISO4250 40 40 ERVIN EFFIN EFFIN EFFIN EFC3250,COP337 GRIRECIIRE COP11210 GRAC COP11210,ISO4220,GRAC,ISO4220,GRAC,ISO4220,GIRRAC,ISO 4220,C orrac COPIIRE, COP2250, COP3250, COP4250 30 琼斯 COP1210, COP3337, COP3530 45 奥尼尔 ENC1105, ENC3250, REL2210 10 史密斯 COP2250, COP3250, COP4250 20 威尔逊 WNC1105, ENC3250, REL2210 [, , , , , ]]
  • 我也不确定你想要什么,但对象上的toString 方法的重点是返回一个字符串表示而不打印它,然后返回""。也许考虑更改它以返回数据而不是打印它。更多信息可以查看the documentation

标签: java list sorting arraylist brackets


【解决方案1】:

当您执行System.out.println(list); 时,您只需使用ArrayList.toString() 方法的默认实现,该方法在[] 括号中以逗号和空格分隔的列表中返回值。 你有两个选择:

  1. 自行遍历列表并单独打印每个学生(只要它有 toString() 方法实现。

  2. 或者您可以使用 replaceAll() 获取您现在从 list.toString() 获得的字符串

一般情况下,第一个选项更可取,因为对于常见情况,"[" "]" ", " 可以是列表元素内的有效字符,并且不能被替换。 但是,对于小情况,当您确定Student name, id or course 中没有此类字符时,您可以这样做。

【讨论】:

    【解决方案2】:

    当您使用System.out.println(list) 时,您正在使用 List 的默认实现将某些内容打印到控制台。

    默认实现会遍历您的列表并调用每个对象的 toString。在 Student 类中覆盖该函数是个好主意。但你只是返回“”。默认实现创建一个新字符串。它以“[”开头。后面是列表中每个对象的 toString 方法的返回值(用“,”分隔)。它以“]”结尾。您的 toString 方法返回一个空字符串“”。这意味着默认实现将创建以下内容:

    [, , , , , , , , , ]

    您现在可以更改 toString 方法的返回值:

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

    然后你会得到以下输出:

    [50 格拉西亚 COP2250、COP3250、COP4250、30 琼斯 COP1210、COP3337、COP3530、10 史密斯 COP2250、COP3250、COP4250、20 威尔逊 WNC1105、ENC3250、REL2210、10 布拉加 ENC1105、ENC3250、ENC3250、Adam105 REL2210、60 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 格拉西亚 COP2250、COP3250、COP4250

    30 琼斯 COP1210、COP3337、COP3530

    10 史密斯 COP2250、COP3250、COP4250

    20 威尔逊 WNC1105、ENC3250、REL2210

    10 布拉加 ENC1105、ENC3250、ISO4250

    20 亚当斯 WNC1105、ENC3250、REL2210

    60 吉隆 COP1210、COP3337、COP3530

    45 奥尼尔 ENC1105、ENC3250、REL2210

    40 欧文 ENC1105、COP3250、ISO4250

    70 伯恩 COP2250、ENC3250、COP3530

    【讨论】:

      【解决方案3】:

      如果您不想在列出 list ArrayList 数组时看到方括号,那么不要只使用:

      System.out.println(list);
      

      您应该遍历数组,以便按照您想要的方式处理每个数组元素,例如:

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

      现在没有方括号了。

      您的 ma​​in() 方法代码应如下所示:

      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 在他的评论中所说,您在 Student 类中错误地设置了 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
      

      【讨论】:

      • 我知道我需要一个 for 循环,只是没有点击,我责怪周末!再次感谢这工作得非常好。
      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多