Рубрики
Без рубрики

Дополнения Java 11 String API

Узнайте о дополнениях к строковому API в Java 11.

Автор оригинала: Ganesh Pagade.

1. введение

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

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

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

Он возвращает строку, значение которой является конкатенацией строки, повторенной 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 также добавила методы strip Leading() и strip Trailing() , которые обрабатывают начальные и конечные пробелы соответственно.

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

strip*() определяет, является ли символ пробелом или нет на основе символа .IsWhiteSpace() . Другими словами, он знает о пробелах в Юникоде .

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

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

Обратите внимание, как trim() смог обрезать начальные пробелы, но не обрезал конечные пробелы. Это связано с тем, что trim() не знает о пробелах в Юникоде и, следовательно, не считает ” \u2005 “ символом пробела.

4. isBlank()

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

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

Аналогично, метод isBlank() знает о пробелах в Юникоде, как и strip() .

5. линии()

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

@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 в Java 11.

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