Как работать со строкой в Java
Java предоставляет множество способов объединения строк String, но иногда, если мы не обращаем внимания на null
строк, мы можем объединить null в результат, что, очевидно, не то, что нам нужно.
В этой статье я расскажу о некоторых способах избежать значений null
при объединении String
.
Анализ случаев.
Если мы хотим объединить массивы строк, мы можем просто использовать оператор +
для их объединения, но мы можем столкнуться со значениями null
.
Это объединит все элементы в результирующую строку следующим образом:
https://gist.github.comnull
Однако мы нашли проблему, и конечное значение null
также объединяется в виде строки, что явно не то, что нам нужно.
Кроме того, даже если мы работаем на Java 8 или выше, а затем используем статический метод String.join()
для объединения строк, мы получим вывод со значениями null
.
Результат также следующий.
https://gist.github.comnull
Итак, как решить эту проблему? Ниже мы поделимся некоторыми решениями.
Чтобы облегчить последующую демонстрацию кода, мы извлекаем метод, который может передавать строку и возвращать ненулевую строку.
# 1. Используйте String.concat()
.
String.concat()
— это метод, который поставляется с классом String. Очень удобно использовать этот метод для конкатенации строк.
Поскольку вызывается метод nullToString()
, в результате нет значений null
.
№ 2. Использование StringBuilder.
Класс StringBuilder предоставляет множество полезных и удобных методов построения строк.
Наиболее часто используется метод append(), который использует append()
для объединения строк и сочетается с методом nullToString()
, чтобы избежать значений null
.
Можно получить следующие результаты:
https://gist.github.com
# 3. Использование класса StringJoiner (Java 8+).
Класс StringJoiner
предоставляет более мощную функцию объединения строк. Он может не только указать разделитель во время объединения, но также указать префикс и суффикс во время соединения. Здесь мы можем использовать его метод add()
для соединения строк.
То же самое будет использовать метод nullToString()
, чтобы избежать нулевых значений.
# 4. Использование Streams.filter (Java 8+).
Stream API — это мощный класс операций с потоками, представленный в Java 8, который может выполнять стандартную фильтрацию, сопоставление, обход, группировку, статистику и другие операции.
Операция фильтрации filter
может получить функцию Predicate
.
Интерфейс функции Predicate
аналогичен представленному ранее интерфейсу Function
.
Это функциональный интерфейс.
Он может принимать общий параметр <T>
, а возвращаемое значение имеет логический тип.
Predicate
часто используется для данных filter
.
Следовательно, мы можем определить Predicate
для проверки строки null
и передать ее методу filter()
Stream API.
Наконец, используйте метод Collectors.joining()
, чтобы соединить оставшиеся строки, отличные от null
.
# 5. Используйте оператор +
.
Использование оператора +
может решить проблему, но не рекомендуется.
Мы знаем, что String — неизменяемый объект. Использование знака +
будет часто создавать строковый объект, и каждый раз в памяти будет создаваться новая строка, поэтому потребление производительности при использовании знака +
для соединения строк очень велико.
Обобщить.
В этой статье представлены несколько способов объединения строк и обработки NULL, и разные способы могут подходить для разных сценариев.
Обратите внимание, что объединение строк является дорогостоящей операцией, вот результаты сравнительного анализа нескольких объединений с использованием JMH.
Видно, что производительность StringBuilder
лучшая. В реальных условиях необходимо комбинировать определенные сценарии, а затем выбирать метод с наименьшими потерями производительности.
Спасибо за прочтение.
Если вам нравятся такие истории и вы хотите поддержать меня, пожалуйста, хлопните мне в ладоши.
Ваша поддержка очень важна для меня — спасибо.
Повышение уровня кодирования
Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:
- 👏 Хлопайте за историю и подписывайтесь на автора 👉
- 📰 Смотрите больше контента в публикации Level Up Coding
- 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"
🚀👉 Размещение таких разработчиков, как вы, в топовых стартапах и технологических компаниях