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()

isBlank()インスタンスメソッドは、文字列が空であるか、空白のみが含まれている場合にtrueを返します。 それ以外の場合は、falseを返します

@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にあります。