行分割のString.lines()
正規表現のオーバーヘッドなしにString.lines()でテキストを行のストリームに分割する。
コード比較
✕ Java 8
String text = "one\ntwo\nthree";
String[] lines = text.split("\n");
for (String line : lines) {
System.out.println(line);
}
✓ Java 11+
String text = "one\ntwo\nthree"; text.lines().forEach(IO::println);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
遅延ストリーミング
split()のように一度にすべてを生成するのではなく、行をオンデマンドで生成します。
万能な改行対応
正規表現なしで\n、\r、\r\nを自動的に処理します。
ストリーム統合
filter・map・collectと直接組み合わせられるStreamを返します。
旧来のアプローチ
split("\\n")
モダンなアプローチ
lines()
JDKバージョン
11
難易度
初級
JDKサポート
行分割のString.lines()
利用可能
JDK 11(2018年9月)以降、利用可能
仕組み
String.lines()は\n、\r、\r\nで分割した行のStream<String>を返します。split()より遅延評価で効率的であり、正規表現のコンパイルを回避し、Stream APIと自然に統合できます。
関連ドキュメント