2015-10-07 58 views
2

以下是我的场景,虽然我已经实现了所需的输出,但我希望它是一个体面和优化的代码。使用StringBuilder生成一个逗号分隔的列表

String arr[]={"we","er","rtt","yu","uu","ii"}; 

     StringBuilder strcat = new StringBuilder(); 

     for(int i1=0;i1<arr.length;i1++) 
     { 
      // Some processing 
     strcat.append(arr[i1]); 

     if(arr.length-1!=i1) 
     { 

       strcat.append(","); 
     } 
     } 

    System.out.println("Value:"+strcat); 

我有String[]阵列和一些处理,处理之后我想的值与逗号(,)附加。 问题是逗号,它也附加到最后的值,我不想要的,我已经应用了一个逻辑。我不知道它是否正确,但输出是正确的。如果我错了,请纠正我,并建议是否有其他方法来实现。

+1

你被允许使用第三方库吗?你的JDK版本是什么? – SMA

+0

我需要它在纯java ..没有任何其他库 –

+0

番石榴的[乔伊纳](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Joiner.html)类正在做这件事。 – allprog

回答

7

好的技巧我在这里学到

String SEPARATOR = ""; 
for(int i1=0;i1<arr.length;i1++) 
{ 
    // Some processing 
    strcat.append(SEPARATOR); 
    strcat.append(arr[i1]); 
    SEPARATOR = ","; 
} 
+1

这是该死的聪明。 :) –

+1

Nice.Very很好。 –

9

如果您使用的是Java 8中,不过已经为这个在String类支持

String result = String.join(",", arr); 

将导致

"we,er,rtt,yu,uu,ii" 
+0

我使用.java 7 –

+2

@vineeth现在是时候移动到Java 8 :) – Maroun

+0

@MarounMaroun完全同意...但并不总是可能的工作..... grrrr .... –

0

的Java 8的流式API允许了一个非常巧妙的解决方案:

String result = Arrays.asList(arr).stream().collect(Collectors.joining(",")); 
+0

当他使用Java 7时,这不起作用。它不考虑数组元素需要处理的步骤。不过,这将是我最喜欢的解决方案。 – hotzst

+1

这似乎是一个简单问题的矫枉过正......'字符串。如果我们打算使用Java8,join()'似乎容易得多...... – Codebender

+0

您可以用'Arrays.stream(arr)'替换'Arrays.asList(arr).stream()'来获得'Stream ' 。 –

0

你可以这样做:

strcat.append(arr[0]); 
for (int iCnt = 1;iCnt <arr.length;++iCnt) { 
    strcat.append(",").append(arr[iCnt]); 
} 
+0

这将需要额外的代码来处理空数组。 –

0

两种方法,我通常看到的是:每一个元素后

  • 追加逗号,然后使用结果
  • 之前删除的最后一个字符前面加上一个逗号,除了第一的所有元素(检查更容易这样,你可以简单地检查strcat.length() == 0
0

你可以首先附加零数组元素(确保数组大小至少为1后),然后之前的每个元素从1追加逗号到长度 - 1.

或者你可以这样做你的方式,然后通过缩短缓冲区与StringBuilder.setLength(int)删除最后的逗号。

相关问题