Java 12の文字列APIの更新

1. 前書き

Java 12は、いくつかの便利なAPIをlink:/java-string[_String_ class]に追加しました。 このチュートリアルでは、これらの新しいAPIを例とともに紹介します。

2. インデント()

_indent()_メソッドは、渡された引数に基づいて文字列の各行のインデントを調整します。
_indent()_が文字列で呼び出されると、次のアクションが実行されます。
  1. 文字列は、_lines()_を使用して概念的に行に分割されます。
    _lines()_はJava 11で導入されたString APIです。

  2. 各行は、次に渡される_int_引数_n_に基づいて調整されます
    それにサフィックスとしてラインフィード「\ n」を付けます。

  3. n> 0の場合、それぞれの先頭に_n_スペースが挿入されます
    ライン。

  4. n <0の場合、最大 _n_個の空白文字が削除されます
    各行の始まり。 特定の行に十分な空白が含まれていない場合、すべての先行空白文字が削除されます。

  5. n == 0の場合、行は変更されません。 ただし、行
    ターミネーターはまだ正規化されています。

  6. 次に、結果の行が連結されて返されます。

    例えば:
@Test
public void whenPositiveArgument_thenReturnIndentedString() {
    String multilineStr = "This is\na multiline\nstring.";
    String outputStr = "   This is\n   a multiline\n   string.\n";

    String postIndent = multilineStr.indent(3);

    assertThat(postIndent, equalTo(outputStr));
}
負の_int_を渡して、文字列のインデントを減らすこともできます。 例えば:
@Test
public void whenNegativeArgument_thenReturnReducedIndentedString() {
    String multilineStr = "   This is\n   a multiline\n   string.";
    String outputStr = " This is\n a multiline\n string.\n";

    String postIndent = multilineStr.indent(-2);

    assertThat(postIndent, equalTo(outputStr));
}

*3. transform() *

_transform()_メソッドを使用して、_this_文字列に関数を適用できます。 関数は、単一の_String_引数を予期し、結果を生成する必要があります。
@Test
public void whenTransformUsingLamda_thenReturnTransformedString() {
    String result = "hello".transform(input -> input + " world!");

    assertThat(result, equalTo("hello world!"));
}
出力が文字列である必要はありません。 例えば:
@Test
public void whenTransformUsingParseInt_thenReturnInt() {
    int result = "42".transform(Integer::parseInt);

    assertThat(result, equalTo(42));
}

4. 結論

この記事では、Java 12の新しい_String_ APIについて説明しました。 いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-12[GitHubで]にあります。