Предположим, у меня есть 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 в одной переменной?
В любой версии Java: Apache Commons имеет класс StringUtils, который имеет метод соединения:
String result = StringUtils.join(words, ",")
На Java 8 вы можете сделать это изначально. См. Эту статью.
Альтернативой общедоступности 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
используйте 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);
,
Вы можете попробовать следующий код,
List<String> words;
String summary = null;
for (String word : words)
{
summary = summary + word + " , ";
}
System.out.println("List items : " + summary);
Я думаю, что самым простым решением было бы использовать StringBuilder
:
String summary;
List<String> words = ...;
StringBuilder builder = new StringBuilder();
for (String word : words) {
builder.append(word);
}
summary = builder.toString();
Самый простой способ - использовать существующую функциональность, например Apache Common StringUtils.join()
. Если это невозможно, это будет работать:
StringBuilder sb = new StringBuilder();
for (String word : words) {
sb.append(word);
}
String summary = sb.toString();
Как предлагает Эран или просто, используйте простую конкатенацию
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;
}
O(n^2)
(см .: алгоритм Шлемиэля Художника ). Вместо этого используйте StringBuilder
, как показано в моем ответе.
String summary = words.stream().collect( Collectors.joining() );
Вы можете просто добавить.
summary += word;
Вы посмотрели
StringUtils.join()
как возможное решение?