Java自定义分隔符输出用于循环

问题描述

我有这个循环

for(int i=1; i <= bil; i++){
            if (i%2!=0)
            System.out.print(i+" ");
        }

我想要这样的输出(如果bil = 5)

1,3 and 5

那么,如何获得具有逗号分隔符且最后一个循环具有诸如'and'之类的不同分隔符的输出

解决方法

这是一种实现方式:

StringBuilder buf = new StringBuilder();
int lastComma = 0;
for (int i = 1; i <= bil; i++) {
    if (i % 2 != 0) {
        if (buf.length() != 0) {
            lastComma = buf.length();
            buf.append(",");
        }
        buf.append(i);
    }
}
if (lastComma != 0)
    buf.replace(lastComma,lastComma + 1," and");
System.out.print(buf.toString());

值为bil

的结果
bil=1   ->  1
bil=2   ->  1
bil=3   ->  1 and 3
bil=4   ->  1 and 3
bil=5   ->  1,3 and 5
bil=6   ->  1,3 and 5
bil=7   ->  1,3,5 and 7
bil=8   ->  1,5 and 7
bil=9   ->  1,5,7 and 9
bil=10  ->  1,7 and 9
,

尝试一下。

static void printBil(int bil) {
    String separator = "";
    for (int i = 1; i <= bil; i++) {
        if (i % 2 != 0)
            System.out.print(separator + i);
        separator = i + 2 >= bil ? " and " : ",";
    }
    System.out.println();
}

for (int i = 1; i < 10; ++i) {
    System.out.print("bil=" + i + " : ");
    printBil(i);
}

输出:

bil=1 : 1
bil=2 : 1
bil=3 : 1 and 3
bil=4 : 1 and 3
bil=5 : 1,3 and 5
bil=6 : 1,3 and 5
bil=7 : 1,5 and 7
bil=8 : 1,5 and 7
bil=9 : 1,7 and 9
,

尝试。

var sj = new StringJoiner(",","","");
String tmp = null;
for (int i = 1; i <= bil; i++) {
    if (i % 2 != 0) {
        if (tmp != null) {
            sj.add(tmp);
        }
        tmp = Integer.toString(i);
    }
}
var res = sj.length() > 0
        ? sj.toString() + " and " + tmp
        : sj.add(tmp).toString();
System.out.println(res);

结果:

bil=1   ➡️  1
bil=2   ➡️  1
bil=3   ➡️  1 and 3
bil=4   ➡️  1 and 3
bil=5   ➡️  1,3 and 5
bil=6   ➡️  1,3 and 5
bil=7   ➡️  1,5 and 7
bil=8   ➡️  1,5 and 7
bil=9   ➡️  1,7 and 9
bil=10  ➡️  1,7 and 9

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...