2013-06-24 22 views
4
System.out.print("Please select a game: "); 
for (String s : gamesArray) {  
    System.out.print(s + ", "); 
} 

输出:最后一个数组项目之后Java打印整个数组,带有“,”符号?

 
Please select a game: spin, tof 
Press any key to exit... 

为什么增加一个 '':

 
Please select a game: spin, tof, Press any key to exit... 

输出我以外? 我该如何预防?

+0

因为作为现在编码,你的两个元素的数组最后一项后打印',',包括最后一个元素 –

+7

增加了另一个“”因为你告诉它在每个数组项之后添加一个。 –

+0

您可以通过编写代码来防止最后一个逗号不被打印。几种不同的方式来做到这一点,但没有一种是自动的 - 你必须仔细考虑并编写代码。 –

回答

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

评论过多,但更好。 –

+0

@WilliamMorrison;) – davidbuzatto

+0

你为什么变数我isnnn数组? [一世] ?对于初学者的问题抱歉,它只是让我困惑。 –

2

为什么增加另一个 '' 最后一个数组项目之后?

,因为没有什么特别之处的最后一个项目,你在的每元素末增加,

如何防止它?

你可以尝试使用普通for -loop和只增加,如果索引你的是不是数组的最后一个索引。等同地,您可以在之前添加,之前的每个元素,并且您将具有相同的效果。

int len = gamesArray.length; 

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

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

[]里面的我做什么? –

+0

@JonyKale它访问数组的第i个元素。 – arshajii

1

最后一个逗号是因为您在每个元素后面打印逗号。

您可以通过重写for循环,从而解决这个问题:

for(int i=0;i<gameArray.length;i++){ 
    System.out.print(gameArray[i]); 
    if(i!=gameArray.length-1){ 
     System.out.println(", "); 
    } 
} 
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

+0

@arshajii:感谢您的意见。我做了replaceAll(“(^ \\ [)|(\\] $)”,“”)'来替换只是开始和结束的方括号。 – anubhava

+2

我很高兴你做出了改变(+1)。但为什么不使用'substring'?当我们所要做的只是去掉第一个和最后一个字符时,正则表达式就会过度消耗。 – arshajii

1

另一种方式处理这个问题(特别是如果你知道数组永远不会是空的话)就是先写第一个元素循环,然后循环写入, <element>

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(); 
2

你可以使用Guava库吗?如果是的话,它的一行代码:

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

Apache Commons有一个类似的连接 –

+0

而Java8也得到了一个。 –