Как работать со строками в Java?
Всем привет! Начал изучать Java и столкнулся с непониманием работы со строками. Вроде бы прочитал, что String — это immutable (неизменяемый) объект, но на практике возникают вопросы.
Проблема: Есть список строк, которые нужно объединить через запятую, но при этом некоторые значения могут быть null. Пытаюсь сделать это в цикле, но получаю либо NullPointerException, либо лишнюю запятую в конце.
Вот что я пробовал (упрощенный код):
List<String> items = Arrays.asList("apple", null, "banana", "cherry");
String result = "";
for (String item : items) {
if (item != null) {
result += item + ",";
}
}
// Получаю "apple,banana,cherry," — лишняя запятая в конце
System.out.println(result);
Также я слышал про StringBuilder, но не понимаю, когда его нужно использовать вместо обычной конкатенации через '+'. В некоторых примерах видели, что для простого сложения строк IDE сама предлагает заменить на StringBuilder, а в других — нет.
Что ожидаю получить:
- Правильный способ объединения строк с фильтрацией null и без лишних разделителей (желательно без сторонних библиотек, только Java SE).
- Объяснение, в каких случаях конкатенация через '+' — это нормально, а когда нужно использовать StringBuilder/StringBuffer.
- Возможно, есть какие-то современные подходы на Java 8+ (Stream API, Collectors.joining), которые решают эту задачу более элегантно?
Буду благодарен за примеры кода и пояснения. Заранее спасибо!