2012-03-16 19 views
0

Java上でregexを使用して数値文字列を分割したいと考えています。 私はオンライン正規表現テストを使用して正規表現が正しいです。 しかし、Javaでは間違っています。正規表現を使用してJavaで数値文字列を分割

Pattern pattern = Pattern.compile("[\\\\d]{1,4}"); 
String[] results = pattern.split("123456"); 
// I expect 2 results ["1234","56"] 
// Actual results is ["123456"] 

何も分からないことはありますか?


私はこの質問が退屈であることを知っています。しかし、私はこの問題を解決したい。 回答

Pattern pattern = Pattern.compile("[\\d]{1,4}"); 
String[] results = pattern.split("123456"); 
// Results length is 0 
System.out.println(results.length); 

が機能しません。私はそれを試してみました。結果には何も返されません。 回答する前にお試しください。

私を助けてくれた人に本当に感謝します。


ソリューション:

Pattern pattern = Pattern.compile("([\\d]{1,4})"); 
Matcher matcher = pattern.matcher("123456"); 
List<String> results = new ArrayList<String>(); 
while (matcher.find()) { 
    results.add(matcher.group(1)); 
} 

出力2件の結果[ "1234"、 "56"]

+0

splitは空白の配列を取得しています。これは、splitが区切り文字の間に*区切り文字を戻して区切り文字を破棄するためです。たぶんこれは役立ちます:http://stackoverflow.com/questions/2206378/how-to-split-a-string-but-also-keep-the-delimiters http://stackoverflow.com/questions/275768/is-there -a-way-to-split-strings-with-string-split-and-the-delimiters – Thilo

+0

今、理解していただきありがとうございます。 –

答えて

5
Pattern pattern = Pattern.compile("[\\\\d]{1,4}") 

あまりにも多くのバックスラッシュ、(あなたは一度だけ、それらをエスケープする必要があり[\\d]{1,4}を試してみてください、 dの前のバックスラッシュは\\になります。実際に書いたパターンは[\\d]{1,4}(リテラルのバックスラッシュまたはリテラルd、1〜4回)です。

Javaが標準ライブラリに正規表現を追加することに決めたとき、文字列の上にshoe-horningの代わりに正規表現のリテラル構文を追加する必要がありました(読み込み不能なエスケープとコンパイル時の構文チェックがありません)。

+0

'[]'は必要ありません。 –

+0

パターンパターン= Pattern.compile( "\\ d {1,4}"); String [] results = pattern.split( "123456");結果の長さはゼロです。 –

+0

ああ、[\\ d] {1,4}は動作していません。お試しください。どうも。 –

1

ソリューション:あなたがキャプチャグループを指定することはできませんので、あなたは、1回のメソッドの呼び出しでそれを行うことはできません

Pattern pattern = Pattern.compile("([\\d]{1,4})"); 
Matcher matcher = pattern.matcher("123456"); 
List<String> results = new ArrayList<String>(); 
while (matcher.find()) { 
    results.add(matcher.group(1)); 
} 

出力2件の結果[ "1234"、 "56"]

1

この分割は、4つのチャンクに分割する必要があります。

それは「エレガント」ではないのですが、あなたは最初に分割する文字を挿入する必要があり、その後、スプリット:

String[] results = "123456".replaceAll("....", "$0,").split(","); 

がここに出力です:あなたがする必要はありません

System.out.println(Arrays.toString(results)); // prints [1234, 56] 

注意Stringには1行の解決策を導く正規表現による分割があるため、Patternなどを使用してください。