Java如何打印一个包含逗号的完整数组?

4
System.out.print("Please select a game: ");
for (String s : gamesArray) {       
    System.out.print(s + ", "); 
}

输出:

请选择一个游戏: spin, tof,按任意键退出...

我期望的输出:

请选择一个游戏: spin, tof
按任意键退出...

为什么它在最后一个数组项后面添加了另一个','?如何防止这种情况发生?


因为现在的代码是,在每个元素后面都打印了逗号“,”,包括最后一个元素。 - Steve Kuo
7
因为您告诉它在每个数组项之后添加一个逗号,所以它在最后一个数组项之后又添加了一个逗号。 - Louis Wasserman
你可以通过编写代码来避免打印最后一个逗号。有几种不同的方法可以做到这一点,但没有一种是自动的 - 你必须实际思考并编写代码。 - Hot Licks
https://dev59.com/onI_5IYBdhLWcg3wHvU5 有很好的解决方案来完成这个任务。 - Squeezy
7个回答

8

为什么不直接调用Arrays#toString(array)方法:

System.out.print("Please select a game: %s%n", 
                  Arrays.toString(gamesArray).replaceAll("(^\\[)|(\\]$)", ""));

或者避免使用正则表达式:

String tmp = Arrays.toString(gamesArray);
System.out.print("Please select a game: %s%n", tmp.substring(1, tmp.length()-1));

1
因为这样会打印出:请选一个游戏:[spin, tof],而不是没有括号。 - ardent
@arshajii:感谢您的评论。我使用了replaceAll("(^\\[)|(\\]$)", "")来仅替换开头和结尾的方括号。 - anubhava
2
我很高兴你做了这个改变(+1)。但是为什么不直接使用substring呢?当我们只想去除第一个和最后一个字符时,正则表达式有些过于复杂了。 - arshajii
@arshajii:不幸的是,我今天已经达到了声望限制 :( 无论如何是的,子字符串也可以使用,但是它不能在一个调用中完成,因为我们需要执行'str.substring(1, substring.length()-1)'; - anubhava

7
// iterate throght array
for ( int i = 0; i < gamesArray.length; i++ ) {

    // get the element
    String s = gamesArray[i];

    // print it
    System.out.print( s );

    // test if the current element is not the last (array size minus 1)
    if ( i != gamesArray.length - 1 ) {

        // if it is not the last element, print a comma and a space.
        System.out.print( ", " );
    }
}

1
注释有点多,但更好。 - William Morrison
你为什么在数组里加了变量 i?[i]?抱歉问这种初学者问题,它让我感到困惑。 - Jony Kale

2
为什么在最后一个数组项后面添加另一个','?
因为最后一项没有特殊之处,您在每个元素的末尾添加了','。
如何防止它?
您可以尝试使用常规的for循环,仅在您所在的索引不是数组的最后一个索引时才添加“,”。同样,您可以在第一个元素之外添加“,”,并且将具有相同的效果。
int len = gamesArray.length;

if (len > 0)
    System.out.println(gamesArray[0]);

for (int i = 1; i < len; i++)
    System.out.print(", " + gamesArray[i]);

[] 中的 i 是做什么用的? - Jony Kale
@JonyKale 它访问数组的第i个元素。 - arshajii

2

你能使用Guava库吗?如果可以,那么只需要一行代码:

String result = Joiner.on(", ").join(gamesArray);
System.out.println(result);

Apache Commons 有一个类似的 join 函数。 - Steve Kuo
Java8 也将得到一个。 - Sebastian Redl

1

另一种处理方式(特别适用于您知道数组永远不会为空的情况)是在循环之前写入第一个元素,然后让循环写入 , <element>


1
最后一个逗号是因为在每个元素后面打印了逗号。
您可以通过将for循环重写为以下内容来解决这个问题:
for(int i=0;i<gameArray.length;i++){
    System.out.print(gameArray[i]);
    if(i!=gameArray.length-1){
        System.out.println(", ");
    }
}

0

在打印“,”以避免在最后一个游戏名称之后出现一个“,”之前,您必须测试您的数组中是否有更多元素。

final Iterator<String> iterator = Arrays.asList(gamesArray).iterator();
while(iterator.hasNext()) {
    System.out.print(iterator.next());
    if(iterator.hasNext()) {
        System.out.print(", ");
    }
}
System.out.println();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接