Перейти к основному содержимому

Дополнения к строковому API Java 11

· 3 мин. чтения

1. Введение

В Java 11 к обычно используемому классу String добавлено несколько полезных API . В этом руководстве мы рассмотрим и будем использовать эти новые API.

2. повторить()

Как следует из названия, метод экземпляра repeat() повторяет содержимое строки.

Он возвращает строку, значение которой является конкатенацией строки, повторенной n раз, где n передается в качестве параметра :

@Test
public void whenRepeatStringTwice_thenGetStringTwice() {
String output = "La ".repeat(2) + "Land";

is(output).equals("La La Land");
}

Кроме того, repeat() возвращает пустую строку, если строка пуста или счетчик равен нулю.

3. полоса*()

Метод экземпляра strip() возвращает строку со всеми удаленными начальными и конечными пробелами :

@Test
public void whenStripString_thenReturnStringWithoutWhitespaces() {
is("\n\t hello \u2005".strip()).equals("hello");
}

В Java 11 также добавлены методы stripLeading() и stripTrailing() , которые обрабатывают начальные и конечные пробелы соответственно.

3.1. Разница между полосой () и обрезкой ()

strip*() определяет, является ли символ пробельным или нет, на основе Character.isWhitespace() . Другими словами, он знает о пробельных символах Unicode .

Это отличается от функции trim() , которая определяет пробел как любой символ, который меньше или равен символу пробела Unicode (U+0020). Если мы воспользуемся функцией trim() в предыдущем примере, мы получим другой результат:

@Test
public void whenTrimAdvanceString_thenReturnStringWithWhitespaces() {
is("\n\t hello \u2005".trim()).equals("hello \u2005");
}

Обратите внимание, как функция trim() смогла обрезать начальные пробелы, но не обрезала конечные пробелы. Это связано с тем, что функция trim() не знает о пробельных символах Unicode и, следовательно, не считает ' \u2005' пробельным символом.

4. пустой ()

Метод экземпляра isBlank() возвращает значение true , если строка пуста или содержит только пробелы. В противном случае возвращается false :

@Test
public void whenBlankString_thenReturnTrue() {
assertTrue("\n\t\u2005 ".isBlank());
}

Точно так же метод isBlank() знает о пробельных символах Unicode, как и strip() .

5. строки ()

Метод экземпляра lines() возвращает поток строк, извлеченных из строки, разделенных символами конца строки :

@Test
public void whenMultilineString_thenReturnNonEmptyLineCount() {
String multilineStr = "This is\n \n a multiline\n string.";

long lineCount = multilineStr.lines()
.filter(String::isBlank)
.count();

is(lineCount).equals(3L);
}

Ограничитель строки может быть одним из следующих: «\n», «\r» или «\r\n» .

Поток содержит строки в том порядке, в котором они встречаются. Ограничитель строки удаляется из каждой строки.

Этот метод должен быть предпочтительнее, чем split() , так как он обеспечивает лучшую производительность при разбиении многострочного ввода.

6. Заключение

В этой быстрой статье мы рассмотрели новые API-интерфейсы String в Java 11.

Наконец, фрагменты кода можно найти на GitHub .