String.trim: примеры (JAVA)

Метод trim() для строк: синтаксис и практическое применение
Раздел: Строки (String) - преобразование
String.trim: String

Описание метода String.trim()

Метод trim() в Java является частью класса java.lang.String и используется для удаления начальных и конечных пробельных символов из строки. Возвращает новую строку (объект String), из которой удалены все символы с кодом меньше или равным '\u0020' (пробел). К таким символам относятся: пробел, табуляция, перевод строки, возврат каретки и другие управляющие символы ASCII.

Метод не принимает аргументов. Если строка не содержит начальных или конечных пробельных символов, возвращается ссылка на исходный объект (без создания нового). Если все символы являются пробельными, результатом будет пустая строка "".

Обычно trim() применяется для очистки пользовательского ввода, сравнения строк без учёта внешних пробелов, обработки данных из файлов или сетевых запросов. Важно помнить, что метод не изменяет исходную строку, а возвращает новую.

Примеры использования

String s1 = "   Hello   ";
String trimmed1 = s1.trim();
System.out.println("'" + trimmed1 + "'");
'Hello'
String s2 = "\t\n  World  \r";
String trimmed2 = s2.trim();
System.out.println("'" + trimmed2 + "'");
'World'
String empty = "   ";
String trimmedEmpty = empty.trim();
System.out.println("is empty: " + trimmedEmpty.isEmpty());
is empty: true
String noTrim = "NoSpaces";
String result = noTrim.trim();
System.out.println(result == noTrim); // ссылка на тот же объект
true

Альтернативные методы в Java

strip() (Java 11 и новее) - удаляет начальные и конечные пробелы по стандарту Unicode, а не только ASCII. Рекомендуется для интернациональных приложений.

stripLeading() и stripTrailing() - удаляют пробелы только слева или справа соответственно.

replaceAll("\\s+", "") - удаляет все пробелы внутри строки, а не только по краям. Используется, когда нужно убрать лишние пробелы везде.

Если требуется удалить только определённые символы, например, только пробелы, но не табуляцию, лучше написать собственную логику с Character.isWhitespace() или регулярным выражением.

Аналоги в других языках

PHP: trim($str) - по умолчанию удаляет обычные пробелы, табуляцию, перевод строки и др. Можно указать список символов вторым аргументом.

$str = "  Hello  ";
echo trim($str);
Hello

JavaScript: str.trim() - удаляет пробельные символы (включая Unicode) с обеих сторон. Аналог Java strip().

let s = "  Hello  ";
console.log(s.trim());
Hello

Python: str.strip() - удаляет пробельные символы (по умолчанию). Можно указать строку символов для удаления.

s = "  Hello  "
print(s.strip())
Hello

SQL: TRIM(expression) или TRIM([LEADING|TRAILING|BOTH] characters FROM string) - стандарт SQL. Удаляет заданные символы (по умолчанию пробелы) с указанных сторон.

SELECT TRIM('  Hello  ');
Hello

C#: str.Trim() - удаляет пробельные символы. Есть перегрузки для удаления заданных символов.

string s = "  Hello  ";
Console.WriteLine(s.Trim());
Hello

Lua: встроенного метода нет, используется string.gsub(s, "^%s*(.-)%s*$", "%1") или string.match(s, "^%s*(.-)%s*$").

s = "  Hello  "
print(s:match("^%s*(.-)%s*$"))
Hello

Go: strings.TrimSpace(s) - удаляет пробельные символы по Unicode.

s := "  Hello  "
fmt.Println(strings.TrimSpace(s))
Hello

Kotlin: str.trim() - аналогичен Java trim(). Также есть trimIndent() и trimMargin() для многострочных строк.

val s = "  Hello  "
println(s.trim())
Hello

Основное отличие: Java trim() работает только с ASCII-пробелами, тогда как strip() в Java 11 и аналоги в JavaScript, Go, Python работают с Unicode. PHP и C# по умолчанию также используют Unicode-пробелы.

Типичные ошибки

Ошибка 1: игнорирование неизменяемости строк. Метод возвращает новую строку, исходная не меняется.

String s = "  text  ";
s.trim(); // результат не сохранён
System.out.println(s); // "  text  "
  text  

Исправление: присвоить результат.

s = s.trim();
System.out.println(s); // "text"
text

Ошибка 2: вызов trim() на null.

String s = null;
s = s.trim(); // NullPointerException
Exception in thread "main" java.lang.NullPointerException

Исправление: проверка на null перед вызовом.

if (s != null) s = s.trim();

Ошибка 3: ожидание удаления всех пробелов. trim() удаляет только начальные и конечные пробелы. Для удаления всех пробелов нужен replaceAll("\\s+", "").

String s = " H e l l o ";
System.out.println(s.trim()); // "H e l l o"
H e l l o

Ошибка 4: замена всех символов с кодом ≤ 0x20 на пустую строку. Иногда удаляются невидимые символы, которые не считаются пробелами в других языках, что может быть неожиданно.

Ошибка 5: использование trim() для удаления только пробелов, но не других разделителей. Для удаления только пробелов (0x20) можно написать s.replaceAll("^ +| +$", "").

Изменения в версиях Java

Метод trim() присутствует с первых версий Java (JDK 1.0). Его поведение не менялось на протяжении многих лет, он по-прежнему базируется на ASCII-пробелах (символы с кодом ≤ 0x20).

В Java 11 были добавлены методы strip(), stripLeading(), stripTrailing() и isBlank(), которые используют Unicode-определение пробела (через Character.isWhitespace()). Это изменение не затронуло trim(), но предоставило более современную альтернативу.

В более поздних версиях (Java 13, 14 и т.д.) метод trim() остаётся без изменений. Рекомендуется использовать strip() для нового кода, если требуется работа с Unicode, но trim() остаётся обратно совместимым и широко используется.

Расширенные примеры

1. Использование в Stream API: обрезка всех строк коллекции.

Пример java
List list = Arrays.asList("  one ", " two ", "three  ");
List trimmed = list.stream().map(String::trim).collect(Collectors.toList());
System.out.println(trimmed);
[one, two, three]

2. Комбинирование с другими методами: сравнение строк без учёта регистра и пробелов.

Пример java
String a = "  Hello World ";
String b = "hello world";
boolean eq = a.trim().equalsIgnoreCase(b);
System.out.println(eq); // true
true

3. Безопасная обработка null с Optional:

Пример java
String input = null;
String result = Optional.ofNullable(input).map(String::trim).orElse("default");
System.out.println(result);
default

4. Разделение строки и обрезка элементов:

Пример java
String csv = "  apple , banana ,  cherry ";
String[] fruits = csv.split(",");
Arrays.setAll(fruits, i -> fruits[i].trim());
System.out.println(Arrays.toString(fruits));
[apple, banana, cherry]

5. Проверка, является ли строка пустой или состоящей только из пробелов (аналог isBlank):

Пример java
String s = "   ";
boolean blank = s.trim().isEmpty();
System.out.println(blank); // true
true

6. Использование trim() в StringBuilder: перед преобразованием в строку.

Пример java
StringBuilder sb = new StringBuilder("  data  ");
String trimmed = sb.toString().trim();
System.out.println("'" + trimmed + "'");
'data'

7. Многократный trim() не меняет результат:

Пример java
String s = "  test  ";
String t = s.trim().trim().trim();
System.out.println(t.equals(s.trim())); // true
true

джава String.trim function comments

En
String.trim Returns a string whose value is this string, with any leading and trailing whitespace removed