【Java】正規表現で行末(改行)を区切り文字として文字列を分割する方法
Windows環境では「\r\n」(CR+LF)が行区切り文字(改行コード)として使われています。この行末にマッチする正規表現が「\r?\n」です。「?」は直前の文字が0回または1回出現することを意味するため、Windows形式の「\r\n」と、Unix/LinuxやmacOSで一般的な「\n」の両方の改行コードに対応できます。
Stringクラスのsplit()メソッドは、正規表現を表す文字列を引数として受け取り、そのパターンが一致した箇所で現在の文字列を分割し、トークン(部分文字列)の配列として返します。2つの一致箇所に挟まれた文字列が、1つのトークンとして扱われます。
したがって、行末を区切り文字として文字列を分割したい場合は、対象の文字列に対してsplit()メソッドを呼び出し、上記の正規表現を引数として渡すだけで実現できます。
サンプルプログラム
import java.util.Scanner;
public class RegexExample {
public static void main(String[] args) {
System.out.println("Enter your input string: ");
Scanner sc = new Scanner(System.in);
String input = " sample text \r\n line1 \r\n line2 \r\n line3 \r\n line4";
String[] strArray = input.split("\\r?\\n");
for (int i=0; i<strArray.length; i++) {
System.out.println(strArray[i]);
}
}
}
実行結果
Enter your input string: sample text line1 line2 line3 line4
このように、split()メソッドに「\r?\n」という正規表現を渡すだけで、改行コードの種類(OSの違い)に依存せず、文字列を行単位で簡単に分割できます。なお、Java 11以降ではString.lines()メソッドを使う方法もあるので、用途に応じて使い分けるとよいでしょう。
-
【Java】Patternクラスのsplit()メソッドの使い方を実行例つきで解説
Pattern.split()メソッドとは java.util.regexパッケージのPatternクラスは、正規表現をコンパイルした結果を保持するクラスです。コンパイル済みの正規表現オブジェクトは再利用できるため、同じパターンで繰り返しマッチングを行う場合に効率的です。 このクラスが提供するsplit()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取ります。そして、正規表現パターンに一致する箇所ごとに入力文字列を分割し、分割されたすべてのトークン(部分文字列)を格納したString型の配列を返します。 基本的な使用例 次の例では、「空白+数字+空白」という
-
Javaで空白文字を区切り文字として文字列を分割する方法
JavaのStringクラスが提供するsplit()メソッドを使うと、指定した区切り文字(デリミタ)を基準に、現在の文字列をより小さな文字列に分割し、その結果を配列として取得できます。もし文字列内に指定した区切り文字が存在しない場合、このメソッドは元の文字列全体を唯一の要素とする配列を返します。空白文字を区切り文字として文字列を分割する手順空白文字を区切り文字として、文字列を配列に分割するには、以下の手順を実行します。対象となるソース文字列を読み込む。split()メソッドを呼び出し、引数として半角スペース「 」を渡す。結果の配列を出力する。サンプルコード次のJavaプログラムは、フ