【问题标题】:Java custom separator output for looping用于循环的 Java 自定义分隔符输出
【发布时间】:2020-08-28 03:40:43
【问题描述】:

我有这个 for 循环

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

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

1, 3 and 5

那么,如何获得具有逗号分隔符且最后一个循环具有不同分隔符(如“和”)的输出?

【问题讨论】:

  • 语法上应该是“1、3、5”。你需要在 3 之后昏迷。

标签: java for-loop output separator


【解决方案1】:

这是一种方法:

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, 3, 5 and 7
bil=9   ->  1, 3, 5, 7 and 9
bil=10  ->  1, 3, 5, 7 and 9

【讨论】:

    【解决方案2】:

    试试这个。

    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, 3, 5 and 7
    bil=8 : 1, 3, 5 and 7
    bil=9 : 1, 3, 5, 7 and 9
    

    【讨论】:

      【解决方案3】:

      试试吧。

      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, 3, 5 and 7
      bil=8   ➡️  1, 3, 5 and 7
      bil=9   ➡️  1, 3, 5, 7 and 9
      bil=10  ➡️  1, 3, 5, 7 and 9
      

      【讨论】:

      • 根据survey,三分之二的开发人员使用 Java 8,这意味着他们可能不熟悉 Java 10 中引入的 var 关键字。除此之外,除了让您少输入几个字符之外,它在您发布的代码中还有什么好处?还是您只是想展示它的用途?
      • 尝试演示 ?? 我不认为大多数开发人员使用 Java 8 在工作中不熟悉新功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2016-04-30
      相关资源
      最近更新 更多