Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Обработка пустых и null строк при конкатенации в Java

Быстрый ответ

Для обработки null, который может возникнуть при соединении строк в Java, вы можете воспользоваться методом Objects.toString(). Этот метод позволяет заменить null на указанную строку, что предотвращает появление "null" в конечной строке.

Java
Скопировать код
String a = null;
String b = "Привет";
String result = Objects.toString(a, "") + b; // Результат "Привет"
Кинга Идем в IT: пошаговый план для смены профессии

Всё в нюансах: обработка null

В Java null может применяться при конкатенации строк, что обеспечивается JLS 8 § 15.18.1. Рассмотрим пример:

Java
Скопировать код
String a = null;
String b = " мир";
String result = a + b;
System.out.println(result); // Вывод "null мир", а не ошибка.

Компилятор проводит объединение, используя StringBuilder, и в результате получаем "null мир".

За занавесом: Optimizations компилятора

В некоторых случаях компилятор Java реализует различные оптимизации для ускорения процесса конкатенации, например использование StringBuffer в дополнение к StringBuilder. Данные оптимизации облегчают увеличение производительности при работе с большим объемом данных.

Java
Скопировать код
StringBuilder sb = new StringBuilder();
sb.append(a); // Корректно работает даже если a == null
sb.append(b); // " мир"
String result = sb.toString(); // Выведется "null мир" или " мир"

Реальные примеры борьбы с "null"

Защитите ваш код от ситуаций NullPointerExceptions таким образом:

Java
Скопировать код
StringBuilder sb = new StringBuilder(); 
sb.append(a == null ? "" : a);
sb.append(b);
String result = sb.toString(); // "null" не появляется

Можно использовать тернарный оператор для обработки null:

Java
Скопировать код
String result = (a == null ? "" : a) + (b == null ? "" : b); // "null" отсутствует

Или вы можете использовать StringUtils из библиотеки Apache Commons:

Java
Скопировать код
String result = StringUtils.defaultString(a) + StringUtils.defaultString(b); // "null" не влияет на итоговый результат

Визуализация

Объединение строк в Java можно представить в виде нанизывания бусин на нить:

Markdown
Скопировать код
String a = "Привет";
String b = null; // Нет бусины
String c = "Мир";

a + b + c

Иллюстрация:

Markdown
Скопировать код
Бусина A (🧵): Привет
Бусина B (🧵): null (бусина отсутствует)
Бусина C (🧵): Мир

Итоговый результат объединения:

Markdown
Скопировать код
🧵 + отсутствующая бусина + 🧵 = "ПриветМир"

Отсутствующая бусина null не мешает соединению.

Null: Зло или необходимость?

Обработка крайних ситуаций и скрытых проблем

Null может вызвать NullPointerExceptions, в особенности, когда методы вызываются для строк, которые казались бы безопасными. Также при конкатенации коллекций или массивов строк может возникнуть неожиданный null.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Альтернативные подходы

В Java существуют различные способы обработки null при объединении строк. Возможно применение метода join класса String или потоков:

Java
Скопировать код
String joined = String.join("", a, b, c); // "ПриветМир", даже если b == null

Удалить null можно с помощью потоков:

Java
Скопировать код
String result = Stream.of(a, b, c)
                      .filter(Objects::nonNull)
                      .collect(Collectors.joining()); // "ПриветМир", исключая "null"

Роль null в вашей работе

Null может выглядеть как проблема, но важно понимать, как его использовать при работе со строками, чтобы создавать более надежный и безгрешный код.

Полезные материалы

  1. How do I compare strings in Java? – Stack Overflow – Обсуждение сравнения строк и null в Java.

  2. String (Java Platform SE 7) – Официальная документация по строкам в Java.

  3. Just a moment... – Руководство по обработке null.

  4. Just a moment... – Принцип объединения строк в Java.

  5. Java Practices->Determine if Strings are equal – Как отличить пустые строки от null.

  6. Chapter 3. Lexical Structure – Лексическая структура в Java.

  7. performance – StringBuilder vs String concatenation in toString() in Java – Stack OverflowStringBuilder против конкатенации строк.

  8. No Title Found – Сравнение методов объединения строк.

  9. DZone – Распространенные ошибки при работе с NullPointerException и другими исключениями.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод в Java позволяет заменить 'null' на указанную строку при конкатенации строк?
1 / 5
Свежие материалы