簡體   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