Перейти к содержанию

Проверка строк на пустоту (Empty) и пробелы (Blank) в Java

В этом руководстве рассмотрим некоторые способы проверки строк на пустоту или пробелы в Java.

Empty или Blank

Довольно часто можно узнать, является ли строка Empty или Blank, но давайте убедимся, что мы правильно понимаем, о чем идет речь.

Мы считаем строку Empty, если она либо null, либо не имеет длины. Если строка состоит только из пробелов, то называем ее Blank.

Для Java пробелы – это такие символы, как пробелы, табуляция и т. д. Для примера посмотрите на Character.isWhitespace.

Пустые строки (Empty Strings)

Начиная с Java 6 и выше

Если мы хотя бы на Java 6, то самый простой способ проверить пустую строку – это String#isEmpty:

boolean isEmptyString(String string) {
    return string.isEmpty();
}

Чтобы проверить ее на null, нужно добавить дополнительную проверку:

boolean isEmptyString(String string) {
    return string == null || string.isEmpty();
}

Java 5 и ниже

String#isEmpty был представлен в Java 6. Для Java 5 и ниже можно вместо этого использовать String#length.

boolean isEmptyString(String string) {
    return string == null || string.length() == 0;
}

На самом деле String#isEmpty – это просто сокращение от String#length.

Blank Strings

И String#isEmpty, и String#length можно использовать для проверки наличия пробелов. Если хотим обнаружить пробелы, можно добиться этого с помощью String#trim. Он удалит все начальные и конечные пробелы перед выполнением проверки.

boolean isBlankString(String string) {
    return string == null || string.trim().isEmpty();
}

Чтобы быть точным, String#trim удалит все начальные и конечные символы с кодом Unicode, меньшим или равным U+0020.

Помните, что строки неизменяемы, поэтому вызов функции trim не изменит базовую строку.

В дополнение к описанному выше подходу, начиная с Java 11, можно использовать метод isBlank() вместо trim():

boolean isBlankString(String string) {
    return string == null || string.isBlank();
}

Метод isBlank() более эффективен, так как он не создает новую строку в куче. Поэтому, если мы используем Java 11 или выше, это предпочтительный подход.

Bean Validation

Еще один способ проверки пустых строк – регулярные выражения. Это удобно, например, при Java Bean Validation:

@Pattern(regexp = "\\A(?!\\s*\\Z).+")
String someString;

Данное регулярное выражение гарантирует, что пустые строки или пробелы не будут проверяться.

Apache Commons

Если можно добавить зависимости, то можно использовать Apache Commons Lang. У него есть множество помощников для Java.

Если используем Maven, нужно добавить зависимость commons-lang3 в pom.xml:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

Среди прочего, там есть StringUtils. Этот класс поставляется с такими методами, как isEmpty, isBlank и т. д.:

StringUtils.isBlank(string)

Этот вызов делает то же самое, что и метод isBlankString. Он проверяет на null и на наличие пробелов.

Guava

Еще одна известная библиотека, которая содержит определенные утилиты, связанные со строками, – это Google Guava. Начиная с версии 23.1 существует две разновидности Guava: android и jre. Вариант Android предназначен для Android и Java 7, тогда как вариант JRE предназначен для Java 8.

Если не нацелены на Android, можно просто добавить JRE в pom.xml:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

Класс Guava Strings поставляется с методом Strings.isNullOrEmpty:

Strings.isNullOrEmpty(string)

Он проверяет, является ли данная строка null или пустой, но не проверяет строки, содержащие только пробелы.

Заключение

Есть несколько способов проверить, пуста строка или нет. Часто мы также хотим проверить, состоит ли строка только из пробельных символов.

Самый удобный способ – использовать Apache Commons Lang, который предоставляет такие помощники, как StringUtils.isBlank. Если хотим придерживаться простой Java, можно использовать комбинацию String#trim с String#isEmpty или String#length. Вместо этого для проверки бинов можно использовать регулярные выражения.

Обязательно ознакомьтесь со всеми этими примерами на GitHub.

Оригинал