Avatar ·

Как работать со строками в 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), которые решают эту задачу более элегантно?

Буду благодарен за примеры кода и пояснения. Заранее спасибо!