Строка Java присоединяется к строке

1

Предположим, у меня есть List Collection of Strings, и я хочу, чтобы цикл был в этом списке и добавлен каждый элемент List в некоторую переменную типа String.

List<String> words;
//assume words have 5 elements
String summary;//variable where i want to keep all elements

for (String word : words){
    //here i want to add new word to the variable summary
}

Как я знаю, Java всегда создает новый объект String. Даже если я попытаюсь изменить значение - новый объект будет создан в любом случае, я прав?

Итак, вот вопрос, как присоединиться ко всем элементам List в одной переменной?

Теги:
foreach

10 ответов

3

В любой версии Java: Apache Commons имеет класс StringUtils, который имеет метод соединения:

String result = StringUtils.join(words, ",")

На Java 8 вы можете сделать это изначально. См. Эту статью.

1

Альтернативой общедоступности Apache (StringUtils) является Guava Joiner.

Например:

 List<String> words = new ArrayList<>();
 words.add("word");
 words.add("anotherWord");

 String joinedWords = Joiner.on(",").join(words);

Это также может быть полезно, если вы не можете использовать Java 8.

См. Wiki: https://github.com/google/guava/wiki/StringsExplained

1

используйте StringBuilder, чтобы присоединиться ко всем словам.

List<String> words;
//assume words have 5 elements
StringBuilder summary = new StringBuilder();

for (String word : words){
    summary.append(word);
}

Наконец, получим объединенную строку с summary.toString().

Примечание. Если у вас есть представление о количестве символов, которые будут добавлены к StringBuilder, будет более эффективно использовать конструктор, который получает начальный размер:

summary = new StringBuilder(size); ,

  • 0
    Спасибо за быстрый ответ
1

Вы можете попробовать следующий код,

List<String> words;
String summary = null;

for (String word : words)
{
    summary = summary + word + " , ";
}
System.out.println("List items : " + summary);
  • 0
    Неэффективно из-за повторного создания объекта String.
1

Я думаю, что самым простым решением было бы использовать StringBuilder:

String summary;
List<String> words = ...;
StringBuilder builder = new StringBuilder();
for (String word : words) {
    builder.append(word);
}

summary = builder.toString();
1

Самый простой способ - использовать существующую функциональность, например Apache Common StringUtils.join(). Если это невозможно, это будет работать:

    StringBuilder sb = new StringBuilder();
    for (String word : words) {
        sb.append(word);
    }
    String summary = sb.toString();
0

Как предлагает Эран или просто, используйте простую конкатенацию

List<String> words;
//assume words have 5 elements
String summary = "";//variable where i want to keep all elements

for (String word : words){
    summary = summary + word;
}
  • 2
    Это ужасно неэффективно, оно создаст промежуточные строки и в конечном итоге будет O(n^2) (см .: алгоритм Шлемиэля Художника ). Вместо этого используйте StringBuilder , как показано в моем ответе.
  • 0
    @ ÓscarLópez Спасибо, не знал, что :)
0
String summary = words.stream().collect( Collectors.joining() );
0

Вы можете просто добавить.

summary += word;
  • 0
    Резюме изначально нулевое: вы не можете этого сделать.
  • 0
    Сначала сделайте строку "sumamry =" ";". Тогда это будет работать.
0

Вы посмотрели

StringUtils.join()

как возможное решение?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню