正規表現による文字列のスプリット
正規表現を利用した文字列のスプリット方法について説明します。
こうした方法をしらないと、正規表現を知っていれば一瞬でできることも、自前でせっせと面倒な関数を書くことになってしまいます。
正規表現で文字列を分割する意義
「カンマあるいは空白文字で文字列を区切り、文字列の配列にする」にはどうしたらよいでしょうか。
自前で関数を書いてもやれないことはありませんが、やれタブを区切り文字として忘れた、とか、スペースが思った以上に入っていた、とか、 考慮しないといけないことがあって案外面倒だったりします。
こうした場合、正規表現を使えば簡単に実現できます。
Pattern の split() メソッド
compile() メソッドにパターン文字列を渡すと、Pattern オブジェクトが取得できます。
Pattern クラスには split() メソッドがあります。 split() メソッドに分割したい文字列を渡すと、パターンに合致する箇所で文字列を分割して、分割した結果を String の配列として返します。
Pattern オブジェクトの split() メソッドの利用例
Pattern オブジェクトの split() メソッドの利用例をみてみましょう。
分割する文字列は "1, 2, 3 4 , 5" とします。数字がカンマ , で区切られているほか、 まちまちの数の空白文字が挿入されています。
これをうまく分割して、数値の部分だけを取り出します。
package com.keicode.java.test;
import java.util.regex.Pattern;
public class TestApp {
public static void main(String[] args) {
Pattern p = Pattern.compile("[,\\s]+");
String[] result = p.split("1, 2, 3 4 , 5");
for (String s : result) {
System.out.printf("[%s]\n", s);
}
}
}
上の例では、パターン文字列として [,\s]+ を指定しています。
これによって、「カンマ (,) または空白文字 (\s) がひとつ以上 (+) で区切る」ということを指定したことになります。
実行結果は次の通りです。
[1]
[2]
[3]
[4]
[5]
確かに区切り文字で区切れていることがわかります。
このように、正規表現のパターンを使って文字列を分割することによって、後処理などをすることなく速やかに求めているデータを取得することができる場合があります。