導入: なぜ今、新しいStringメソッドを使うべきなのか
Java 11および12で導入されたStringクラスの追加メソッド(repeat, indent, transform)は、従来StringBuilderや複雑な正規表現で行っていた処理を、簡潔かつ可読性の高いコードに書き換えることができます。実務において、ログ出力のフォーマット整形や、複雑な文字列変換処理をシンプルに保つことは、保守性を高めるために極めて重要です。本記事では、これら3つのメソッドの活用法を解説します。
基礎知識: 各メソッドの役割
String.repeat(int count)は、指定した回数だけ文字列を繰り返した結果を返します。これまでStringBuilderでループを回していた処理を1行に集約できます。
String.indent(int n)は、各行の先頭に指定した数のスペースを挿入し、必要に応じて改行コードを正規化します。ログのインデント整形に最適です。
String.transform(Function f)は、文字列を引数として特定の関数(ラムダ式など)を適用し、その結果を返すメソッドです。メソッドチェーンの途中で型変換や加工を行いたい場合に非常に強力です。
実装/解決策
これらのメソッドを使いこなす鍵は、「一時変数を減らすこと」にあります。特にtransformは、Stringを受け取って何かを返す処理を流れるように記述できるため、ロジックの可読性が大幅に向上します。
サンプルプログラム
以下のコードは、上記メソッドを実務に近い形で利用した例です。
import java.util.function.Function;
public class StringUtilsExample {
public static void main(String[] args) {
// 1. repeat: 区切り線の生成(ログ出力などで多用)
String separator = "=".repeat(20);
System.out.println(separator);
// 2. indent: ログの整形
String logMessage = "エラーが発生しました。\n詳細: 接続タイムアウト";
// 各行に4スペースを追加してインデント
System.out.println(logMessage.indent(4));
// 3. transform: メソッドチェーンでの文字列加工
String input = " java-development ";
String result = input.transform(String::trim)
.transform(s -> s.replace("-", "_"))
.transform(String::toUpperCase);
System.out.println("加工後の文字列: " + result); // "JAVA_DEVELOPMENT" と出力
System.out.println(separator);
}
}
応用・注意点: 現場での活用と落とし穴
1. indentメソッドの挙動に注意
indentメソッドは、単なるスペース追加だけでなく、内部的に改行コード(\n)を挿入・調整します。そのため、Windows環境とLinux環境が混在するプロジェクトで、改行コードの統一を意図せずに実行してしまう可能性があります。プラットフォーム依存の挙動を避けたい場合は注意が必要です。
2. transformの過度な利用
transformは非常に便利ですが、ラムダ式のブロックが長くなると可読性が逆に低下します。処理が複雑になる場合は、無理にtransformで繋がず、通常のメソッド呼び出しやクラス分割を検討してください。
3. レコードやOptionalとの親和性
レコード(Record)型で保持しているプロパティに対して、これらのメソッドを適用することで、不変性を保ったまま安全かつクリーンに文字列を加工できます。特にAPIのレスポンスDTOを生成する際、transformを組み合わせることで、変換ロジックを直感的に記述できるようになります。
これらのメソッドは、Java 11以降の環境であれば積極的に採用すべきです。コードの「ノイズ」を減らし、本来のビジネスロジックに集中できる環境を整えていきましょう。

コメント