2016-09-16 8 views
-1

String.split()ではなく、正規表現を使用してJavaでPatternおよびMatcherクラスを使用してこの文字列を分割する方法はありますか?文字列をコンマで区切り、String.splitの代わりにRegexで置き換えます

o_9,o_8,x_7,o_6,o_5 

私は"\\w"でそれをやって試してみましたが、それはただoあるm.group()で一つのグループが返されました。コンマ以外のものはすべてマッチしているはずです。誰かがこの文字列分割で私を助けることができますか?

+1

'String.split'を使用する際に何が問題になりますか?正規表現は、任意の長さのパターンを扱うのが良くありません。あなたはいつも5つのCSVで区切られた項目を持っているのですか、あるいは項目の数が変わる可能性がありますか? –

+0

適切な正規表現は '/ [^ \、] + /'となります。しかし、@ TimBiegeleisen –

+0

しかし、['String.split(String)'](https://docs.oracle.com/javase/8/docs/api/java/lang/String)のように、String.splitのアプローチを好むでしょう。 html#split-java.lang.String-)は*正規表現*をとります。 –

答えて

0

を私はあなたが間違って行ってきた場所がわからないんだけど、アラン・ムーアの役に立つ提案への返信で、あなたが最初の単語だけに一致することができると言いました。好ましくは、あなたのクラスの最上部付近private static finalとして -

パフォーマンスを実現するため
Matched "o_9". 
Matched "o_8". 
Matched "x_7". 
Matched "o_6". 
Matched "o_5". 

、パターンを一度にコンパイルする必要があります。

String s = "o_9,o_8,x_7,o_6,o_5"; 
    Pattern p = Pattern.compile("\\w+"); 
    Matcher m = p.matcher(s); 
    while (m.find()) { 
     String matchedWord = m.group(); 
     System.out.println("Matched \"" + matchedWord + "\"."); 
    } 

出力:次のコードは、それがすべての単語と一致していることを示しています。本当に必要な場合以外は、文字列の配列を作成しないでください(String.split())。

+0

私は今何が間違っているのか分かります。私は、m.find()のwhileループを使用する代わりに、m.group(0)、m.group(1)を出力して、マッチャからすべての値を出力しようとしていました。ルーキーミス。ありがとうございました。 – Varun

0

これを見てください:

String str = "o_9,o_8,x_7,o_6,o_5"; 
String[] getstr = str.split(','); 
String str1 = getstr[0]; 
String str2 = getstr[1]; 
String str3 = getstr[2]; 
String str4 = getstr[3]; 
String str5 = getstr[4]; 
関連する問題