«1. Введение
В Java 11 к обычно используемому классу String добавлено несколько полезных API. В этом руководстве мы рассмотрим и будем использовать эти новые API.
2. Repeat()
Как следует из названия, метод экземпляра Repeat() повторяет содержимое строки.
Возвращает строку, значение которой представляет собой конкатенацию строки, повторенной n раз, где n передается в качестве параметра:
@Test
public void whenRepeatStringTwice_thenGetStringTwice() {
String output = "La ".repeat(2) + "Land";
is(output).equals("La La Land");
}
Кроме того, repeat() возвращает пустую строку, если строка пуста или количество равен нулю.
3. strip*()
Метод экземпляра strip() возвращает строку с удаленными начальными и конечными пробелами:
@Test
public void whenStripString_thenReturnStringWithoutWhitespaces() {
is("\n\t hello \u2005".strip()).equals("hello");
}
В Java 11 также добавлены методы stripLeading() и stripTrailing(), которые обрабатывают начальные и конечные пробелы соответственно.
3.1. Разница между strip() и trim()
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()
Метод экземпляра isBlank() возвращает значение true, если строка пуста или содержит только пробелы. В противном случае он возвращает false:
@Test
public void whenBlankString_thenReturnTrue() {
assertTrue("\n\t\u2005 ".isBlank());
}
Точно так же метод isBlank() знает о пробельных символах Unicode, как и strip().
5. lines()
Метод экземпляра 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.