繁体   English   中英

我如何在没有最后一个逗号的情况下打印出一串数组?

[英]How would I print out a string of arrays without the last comma?

for (String userName : studentEnrollments.keySet()) {
    System.out.println("Student: " + userName);
    ArrayList<String> courses = studentEnrollments.get(userName);
    String courseMessage = "Courses: ";
    for (String singleCourse : courses) {
        courseMessage += singleCourse + ", ";
        System.out.println(courseMessage);
    }
}

在for循环之后,它会打印出学生正在修读的每门课程。 用逗号将字符串打印出来而末尾没有逗号的正确方法是什么?

例如:AC130,AC140,AC150,到AC130,AC140,AC150

与Iterator一起使用一会儿,而不是for循环,然后仅当hasNext()返回true时才添加昏迷。

String courseMessage = "Courses: ";
Iterator<String> c = studentEnrollments.get(userName).iterator();

while (c.hasNext()) {
    courseMessage += c.next();
    if (c.hasNext()) {
        courseMessage += ",";
    }
}

请注意,在Java 8中,您可以使用StringJoiner

 String commaSeparatedCourses = courses.stream().collect(Collectors.joining(", "));

您可以从apache使用StringUtils.join方法

范例:

StringUtils.join(studentEnrollments, ", ");

这是另一种方法:

  • 定义一个空字符串作为分隔符
  • 打印分隔符和数组元素(按此顺序,首先分隔符)
  • 将分隔符更改为逗号(或任何您想要的)

此方法可以解决问题:您可以在除第一个元素之外的每个元素之前添加一个逗号,而不是在最后一个元素之后添加一个逗号。

这是一个实现

String separator = "";
for (String singleCourse : courses) {
    courseMessage += separator + singleCourse;
    System.out.println(courseMessage);
    separator = ",";
}

如果您使用的是Java 8,则可以使用StringJoiner

StringJoiner joiner = new StringJoiner(", ");
for (String singleCourse : courses) {
    joiner.add(singleCourse);
}
System.out.println(joiner.toString());

否则,您可以只在字符串前面添加,而不是附加它。

String courseMessage = "Courses: " + courses.get(0);
for (int i = 1; i<courses.size();++i) {
    courseMessage += ", " + courses.get(i);
}

使用StringBuilder:

for (String userName : studentEnrollments.keySet()) {
    System.out.println("Student: " + userName);
    ArrayList<String> courses = studentEnrollments.get(userName);
    StringBuilder sb = new StringBuilder();
    for (String singleCourse : courses) {
        if(sb.length()>0){
            sb.append(", ");
        }
        sb.append(singleCourse);
    }
    System.out.println(sb.insert(0, "Courses: ").toString());
}

改用StringBuilder

for (String userName : studentEnrollments.keySet()) {
    System.out.println("Student: " + userName);
    ArrayList<String> courses = studentEnrollments.get(userName);
    StringBuilder courseMessage = "Courses: ";
    for (String singleCourse : courses) {
        sb.append(singleCourse).append(", ");
    }
    if (sb.length() > 2) 
        sb.setLength(sd.length() -2);
    String courseMessage = sb.toString();
    System.out.println(courseMessage);
}

甚至与StringUtils更好(来自apache-common)

for (String userName : studentEnrollments.keySet()) {
    System.out.println("Student: " + userName);
    ArrayList<String> courses = studentEnrollments.get(userName);
    String courseMessage = sb.toString();
    System.out.println(StringUtils.join(courses, ", ");
}

对于Java 8之前的解决方案,您也可以看看此片段作为起点

String[] courses ={ "AC130", "AC140", "AC150" };
for (int i = 0; i < courses.length - 1; i++) {
    System.out.append(courses[i]).append(", ");
}
System.out.println(courses[courses.length-1]);

简短说明:对于除最后一个元素以外的所有元素,它只打印“ element” +“,”,对于最后一个元素它仅打印“ element”。 您需要确保自己不会处理空数组。

使用string.replaceAll(", $", "") ,如下所示:

for (String userName : studentEnrollments.keySet()) {
            System.out.println("Student: " + userName);
            ArrayList<String> courses = studentEnrollments.get(userName);
            String courseMessage = "Courses: ";
            for (String singleCourse : courses) {
                courseMessage += singleCourse + ", ";
            }
  System.out.println(courseMessage.replaceAll(", $", ""));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM