9
votes

Créer une chaîne formatée de ArrayList

Prenons le suivant:

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


0 commentaires

7 Réponses :


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

0 commentaires

16
votes

Vous pouvez utiliser Commons Lang : Xxx

Alternativement, si vous ne pouvez pas utiliser des bibliothèques externes: xxx


3 commentaires

Je préfère également l'approche des communes Lang, d'autant plus que je l'ai comme une dépendance dans tous les projets de toute façon.


Je finis habituellement de l'utiliser pour une raison ou une autre aussi. Aucune raison de réinventer la roue sauf si vous avez des contraintes spécifiques vous limitant à utiliser des bibliothèques externes. Certaines des bibliothèques Apache Commons ont leurs inconvénients lorsqu'il s'agit de collections et de génériques, mais Stringutils est assez simple.


Solution très soignée! Je savais qu'il doit y avoir un moyen de le faire dans une doublure .. Et la Stringutils Lib est presque standard à inclure quand même.



2
votes

Vous devrez remplacer la dernière virgule avec un ')'. Mais utilisez un stringbuilder au lieu d'ajouter des cordes ensemble.


0 commentaires

2
votes

Que diriez-vous de Google-GUAVA

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

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


0 commentaires

0
votes

Si vous avez utilisé un itérateur code>, vous pouvez tester hasnext () code> à l'intérieur de votre boucle pour déterminer si vous avez besoin d'ajouter une virgule.

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


0 commentaires

7
votes

Depuis Java 8 Strong> Vous pouvez également faire:

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


0 commentaires

1
votes

Construction de Mateusz 'sons Java 8, il existe un exemple dans le StringJoininer Javadoc qui fait presque ce que veut. Il ressemblerait légèrement à ceci:

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

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


0 commentaires