1. 序章

Java 12は、Stringクラスにいくつかの便利なAPIを追加しました。 このチュートリアルでは、これらの新しいAPIを例を挙げて説明します。

2. インデント()

indent()メソッドは、渡された引数に基づいて、文字列の各行のインデントを調整します。

文字列に対してindent()が呼び出されると、次のアクションが実行されます。

  1. 文字列は、 lines()を使用して概念的に行に分割されます。 lines()は、Java11で導入された文字列APIです。
  2. 次に、各行は、渡されたint引数nに基づいて調整され、その後に改行「\n」が付けられます。
    1. n > 0の場合、nスペースが各行の先頭に挿入されます。
    2. もしも n <0、その後まで n 各行の先頭から空白文字が削除されます。 特定の行に十分な空白が含まれていない場合、先頭の空白文字はすべて削除されます。
    3. n == 0の場合、行は変更されません。 ただし、ラインターミネータは引き続き正規化されています。
  3. 結果の行は連結されて返されます。

例えば:

@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. 結論

この記事では、Java12の新しいStringAPIについて説明しました。 いつものように、コードスニペットはGitHubにあります。