Автор оригинала: 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 .