Java12での文字列APIの更新
1. 序章
Java 12は、Stringクラスにいくつかの便利なAPIを追加しました。 このチュートリアルでは、これらの新しいAPIを例を挙げて説明します。
2. インデント()
indent()メソッドは、渡された引数に基づいて、文字列の各行のインデントを調整します。
文字列に対してindent()が呼び出されると、次のアクションが実行されます。
- 文字列は、 lines()を使用して概念的に行に分割されます。 lines()は、Java11で導入された文字列APIです。
- 次に、各行は、渡されたint引数nに基づいて調整され、その後に改行「\n」が付けられます。
- n > 0の場合、nスペースが各行の先頭に挿入されます。
- もしも n <0、その後まで n 各行の先頭から空白文字が削除されます。 特定の行に十分な空白が含まれていない場合、先頭の空白文字はすべて削除されます。
- n == 0の場合、行は変更されません。 ただし、ラインターミネータは引き続き正規化されています。
- 結果の行は連結されて返されます。
例えば:
@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のにあります。