Удаление пробелов из строки в Java: как убрать все пробелы и табуляции?
Использование регулярного выражения с replaceAll()
Самый надёжный и универсальный способ удалить все пробельные символы в Java — использовать метод String.replaceAll() с регулярным выражением \\s. Класс \\s в Java соответствует любому пробельному символу, включая:
- Обычный пробел (
' ') - Табуляцию (
'\t') - Перевод строки (
'\n') - Возврат каретки (
'\r') - Перевод страницы (
'\f') - Неразрывный пробел и другие Unicode-пробелы
Пример кода:
public class RemoveWhitespace {
public static void main(String[] args) {
String input = " Привет, мир!\n\tТестовая\tстрока. ";
String result = input.replaceAll("\\s", "");
System.out.println("Результат: '" + result + "'");
// Вывод: Результат: 'Привет,мир!Тестоваястрока.'
}
}
Как это работает
Метод replaceAll() принимает два аргумента: регулярное выражение (первый параметр) и строку замены (второй параметр). В нашем случае:
\\s— это регулярное выражение, которое означает «любой пробельный символ» (двойной обратный слеш нужен для экранирования в Java-строке).""— пустая строка, то есть мы заменяем каждый пробельный символ на пустоту (удаляем его).
Альтернативные подходы
Если вы работаете с Java 11 или новее, можно использовать метод String.strip() — но он удаляет пробелы только по краям, как trim(), и не подходит для вашей задачи.
Также есть вариант с StringTokenizer или Scanner, но они менее производительны и удобны:
// Старый способ через StringTokenizer (не рекомендуется)
String input = "a b c";
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(input);
while (st.hasMoreTokens()) {
sb.append(st.nextToken());
}
System.out.println(sb.toString()); // "abc"
Важное замечание про производительность
Метод replaceAll() каждый раз компилирует регулярное выражение, что может быть медленно при частых вызовах. Если вы удаляете пробелы в цикле (например, обрабатываете миллионы строк), лучше один раз создать объект Pattern и использовать его:
import java.util.regex.Pattern;
public class FastRemoveWhitespace {
private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s");
public static String removeWhitespace(String input) {
return WHITESPACE_PATTERN.matcher(input).replaceAll("");
}
public static void main(String[] args) {
String input = " Привет, мир! ";
System.out.println(removeWhitespace(input)); // "Привет,мир!"
}
}
Проверка на null
Не забывайте проверять строку на null, иначе получите NullPointerException:
public static String safeRemoveWhitespace(String input) {
return (input == null) ? null : input.replaceAll("\\s", "");
}
<<Использование Apache Commons Lang (StringUtils)
Если в вашем проекте уже используется библиотека Apache Commons Lang (или вы готовы её подключить), задача решается одной строкой через StringUtils.deleteWhitespace():
import org.apache.commons.lang3.StringUtils;
public class RemoveWhitespaceCommons {
public static void main(String[] args) {
String input = " Привет, мир!\nТест\tстрока. ";
String result = StringUtils.deleteWhitespace(input);
System.out.println(result); // "Привет,мир!Тестстрока."
}
}
Этот метод делает то же самое, что и replaceAll("\\s", ""), но:
- Работает с
nullбез исключений (возвращаетnull). - Не требует явного создания
Pattern— библиотека уже оптимизирована. - Код становится более читаемым и самодокументируемым.
Для подключения добавьте в Maven:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
Этот подход особенно удобен, если вы уже используете другие методы из StringUtils (проверка на пустоту, обрезка, замена и т.д.).
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги