Java 11 String API Additions

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

1. Вступление

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

2. repeat()с

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

It returns a string whose value is the concatenation of the string repeated n times, where n is passed as a parameter:

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

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

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

3. strip () *

The strip() instance method returns a string with all leading and trailing whitespaces removed:

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

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

3.1. Разница междуstrip() иtrim()

strip*() определяет, является ли символ пробелом или нет, на основеCharacter.isWhitespace(). Другими словами,it is aware of Unicode whitespace characters.

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

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

Обратите внимание, какtrim() смог обрезать начальные пробелы, но не обрезал конечные пробелы. Это связано с тем, чтоtrim() не знает о пробельных символах Unicode и, следовательно, не считает « ′ пробельным символом».

4. isBlank()с

The isBlank() instance method returns true if the string is empty or contains only whitespace. Otherwise, it returns false:

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

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

5. lines()с

The lines() instance method returns a Stream of lines extracted from the string, separated by line terminators:

@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);
}

Знак конца строки может быть одним из следующих:“ ”,“ ”, или“ ”.

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

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

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

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

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