Создать отформатированную строку из ArrayList - PullRequest
9 голосов
/ 12 января 2011

Рассмотрим следующий код:

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

Мой результат здесь (2134,3423,4234,343), как и ожидалось ..

Я заменяю последнюю запятую на окончание) наполучить ожидаемый результат.Есть ли лучший способ сделать это в целом?

Ответы [ 7 ]

16 голосов
/ 12 января 2011

Вы можете использовать Commons Lang :

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

В качестве альтернативы, если вы не можете использовать внешние библиотеки:

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();
5 голосов
/ 15 января 2015

С Java 8 вы также можете сделать:

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());
2 голосов
/ 12 января 2011

Как насчет этого из google-guava

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

System.out.println("("+JjoinedStr+")");
2 голосов
/ 12 января 2011

Вам придется заменить последнюю запятую на ')'.Но используйте StringBuilder вместо добавления строк вместе.

1 голос
/ 11 октября 2016

Создание Mateusz на примере Java 8, есть пример в StringJoiner JavaDoc, который почти выполняет то, что хочет OP.Слегка подправлено это будет выглядеть так:

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

String commaSeparatedNumbers = numbers.stream()
     .map(i -> i.toString())
     .collect( Collectors.joining(",","(",")") );
0 голосов
/ 12 января 2011

Если вы используете Iterator, вы можете проверить hasNext() внутри цикла, чтобы определить, нужно ли добавлять запятую.

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 голосов
/ 12 января 2011
for(int aValue : aList) {
    if (aValue != aList.Count - 1)
    {
          tmpString += aValue + ",";
    }
    else
    {
          tmpString += aValue + ")";
    }
}

Возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...