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 .