Java11文字列APIの追加
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()インスタンスメソッドは、先頭と末尾の空白がすべて削除された文字列を返します:
@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空白文字を認識します。
これは、スペースをUnicodeスペース文字(U + 0020)以下の任意の文字として定義する trim()とは異なります。 前の例でtrim()を使用すると、異なる結果が得られます。
@Test
public void whenTrimAdvanceString_thenReturnStringWithWhitespaces() {
is("\n\t hello \u2005".trim()).equals("hello \u2005");
}
trim()が先頭の空白をトリミングできたが、末尾の空白はトリミングされなかったことに注意してください。 これは、 Trim()がUnicode空白文字を認識しないため、’ \u2005′空白文字を考慮しないためです。
4. isBlank()
@Test
public void whenBlankString_thenReturnTrue() {
assertTrue("\n\t\u2005 ".isBlank());
}
同様に、 isBlank()メソッドは、 strip()と同様に、Unicode空白文字を認識します。
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. 結論
このクイック記事では、Java11の新しい文字列APIについて説明しました。
最後に、コードスニペットはGitHubのにあります。