java - 变量结果多于两个且结果末尾为 "and"如何显示逗号?

标签 java string delimiter csv

一个代码,给出用户给定数字 (x,y) 中 5 的倍数。如果没有要显示的,打印“NONE”。如果有两个要显示,用“and”隔开。如果有两个或两个以上要显示,则用逗号和末尾的“和”分隔。

System.out.print("Enter first number: ");
int x = new Scanner (System.in).nextInt();
System.out.print("Enter last number: ");
int y = new Scanner (System.in).nextInt();
System.out.print("The multiples of 5 from "+x+ " to " +y+ " : ");

for (;x<=y; x++) {  
    if(x%5==0) {
            System.out.printf("%,d ",x);
    }
}

示例输出:

Enter number: 1
Enter number: 4
The multiples of 5 from 1 to 4: NONE

示例输出:

Enter number: 8
Enter number: 12
The multiples of 5 from 8 to 12: 10

示例输出:

Enter number: 1
Enter number: 17
The multiples of 5 from 1 to 17: 5, 10, and 15.

最佳答案

您在 printf 中使用的逗号不是一个简单的字符,它是模式 %,d 的一部分。

Format String Syntax

  • If the ',' ('\u002c') flag is given, then the locale-specific grouping separator is inserted by scanning the integer part of the string from least significant to most significant digits and inserting a separator at intervals defined by the locale's grouping size.

您需要将其移出模式 %d 并添加条件以删除第一个匹配数字的逗号。

for (int i = 0; x <= y; x++) {
    if (x % 5 == 0) {
        System.out.printf("%s%d", (i++ == 0 ? "" : ","), x);
    }
}

或者你可以用花哨的方式来写

String result = IntStream.rangeClosed(x, y)
                         .filter(i -> i % 5 == 0)
                         .mapToObj(Integer::toString)
                         .collect(Collectors.joining(","));
System.out.println(result);

我展示了两个使用 "," 作为唯一分隔符的工作示例。对于三个定界符("、""、""和 "),它变得有点棘手。在极少数情况下,switch 语句会派上用场。

final List<String> values = IntStream.rangeClosed(x, y)
        .filter(i -> i % 5 == 0)
        .mapToObj(Integer::toString)
        .collect(Collectors.toList());

switch (values.size()) {
    case 0:
        System.out.println("NONE");
        break;
    case 1:
        System.out.println(values.get(0));
        break;
    case 2:
        System.out.println(String.join(" and ", values));
        break;
    default:
        final String last = values.remove(values.size() - 1);
        System.out.println(String.join(", ", values) + ", and " + last);
}

关于java - 变量结果多于两个且结果末尾为 "and"如何显示逗号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58097069/

相关文章:

java - 对 api 的异常处理和错误响应

php - 如何将以 HTML 形式输入的字符串保存到文本文件

bash 在用 ifs 分割行后打印整行

java - 如何在Java中读取文件时检测分隔符

java - 如何在 Spring Boot 中一起使用 auth0 和 swagger?

Java Tomcat 从线程初始化 servlet

java - JAXWS/JAXB 检查对象是否为空(不是字符串)

java - 如何将字符串输入数组直到输入字符串匹配条件?

ruby - 字符串中的反斜杠返回两个反斜杠

sorting - 如何按字母顺序对逗号分隔的单元格 Google 表格进行排序?