2011-01-12 13 views
8

Erwägen folgenden Code:von Arraylist

ArrayList<Integer> aList = new ArrayList<Integer>(); 
    aList.add(2134); 
    aList.add(3423); 
    aList.add(4234); 
    aList.add(343); 

    String tmpString = "("; 

    for(int aValue : aList) { 
     tmpString += aValue + ","; 
    } 
    tmpString = (String) tmpString.subSequence(0, tmpString.length()-1) + ")"; 

    System.out.println(tmpString); 

Mein Ergebnis ist hier (2134,3423,4234,343) wie erwartet ..

ich ersetzen das letzte Komma mit der Endung) um das erwartete Ergebnis zu erhalten. Gibt es einen besseren Weg, dies generell zu tun?

Antwort

15

Sie könnten Commons Lang verwenden:

String tmpString = "(" + StringUtils.join(aList, ",") + ")"; 

Alternativ, wenn Sie keine externen Bibliotheken verwenden können:

StringBuilder builder = new StringBuilder("("); 
for (int aValue : aList) builder.append(aValue).append(","); 
if (aList.size() > 0) builder.deleteCharAt(builder.length() - 1); 
builder.append(")"); 
String tmpString = builder.toString(); 
+0

Ich bevorzuge auch den Commons-Lang-Ansatz, zumal ich es als Abhängigkeit in allen Projekten sowieso habe. –

+0

Ich benutze es normalerweise auch aus dem einen oder anderen Grund. Kein Grund, das Rad neu zu erfinden, es sei denn, Sie haben bestimmte Einschränkungen, die Sie davon abhalten, externe Bibliotheken zu verwenden. Einige der Apache-Commons-Bibliotheken haben ihre Nachteile, wenn es um Sammlungen und Generika geht, aber StringUtils ist ziemlich einfach. –

+0

Sehr saubere Lösung! Ich wusste, dass es einen Weg geben muss, dies in einem einzigen Liner zu tun. Und die StringUtils-Bibliothek ist sowieso fast Standard. – StefanE

-1
for(int aValue : aList) { 
    if (aValue != aList.Count - 1) 
    { 
      tmpString += aValue + ","; 
    } 
    else 
    { 
      tmpString += aValue + ")"; 
    } 
} 

Vielleicht?

+0

aList.size() ist die richtige. – pringlesinn

2

Sie das letzte Komma mit einem ')' ersetzen. Verwenden Sie jedoch einen StringBuilder, anstatt Strings zusammenzufügen.

2

Wie sei es damit aus google-guava

String joinedStr = Joiner.on(",").join(aList); 

System.out.println("("+JjoinedStr+")"); 
0

Wenn Sie ein Iterator verwenden Sie hasNext() in Ihrer Schleife testen konnte, um festzustellen, ob Sie ein Komma anhang benötigt.

StringBuilder builder = new StringBuilder(); 
builder.append("("); 

for(Iterator<Integer> i=aList.iterator(); i.hasNext();) 
{ 
    builder.append(i.next().toString()); 
    if (i.hasNext()) builder.append(","); 
} 

builder.append(")"); 
4

Seit Java 8 können Sie auch tun:

ArrayList<Integer> intList = new ArrayList<Integer>(); 
intList.add(2134); 
intList.add(3423); 
intList.add(4234); 
intList.add(343); 

String prefix = "("; 
String infix = ", "; 
String postfix = ")"; 

StringJoiner joiner = new StringJoiner(infix, prefix, postfix); 
for (Integer i : intList) 
    joiner.add(i.toString()); 

System.out.println(joiner.toString()); 
1

Gebäude aus Mateusz ‚s Java 8 Beispiel ein Beispiel, bei dem StringJoiner JavaDoc gibt es die fast tut, was OP will. Etwas optimiert würde es so aussehen:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4); 

String commaSeparatedNumbers = numbers.stream() 
    .map(i -> i.toString()) 
    .collect(Collectors.joining(",","(",")"));