Java 11 String API Additions

1. Въведение

Java 11 добави няколко полезни API към често използвания клас String . В този урок ще изследваме и използваме тези нови API.

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

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

Той връща низ, чиято стойност е конкатенацията на низ, повторен 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 ()

Методът на екземпляра 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.