2012-02-24 15 views
2

私は、 "a_x、b_y、c_z"という形式のJava文字列を持っています。私は希望javaの文字列からこれらの部分文字列を取り除くには?

_前にチャンクを取り除くと,.

後だから私はX、Y、Zを取得する必要があります。

どうすればこの問題を解決できますか?
私はString.replaceAll(",*_",",")仕事をするが、エラーを取得しようとしています:スレッド「メイン」java.util.regex.PatternSyntaxExceptionで

例外:インデックス0

近くダングリングメタ文字「*」を助けてください。

+0

正規表現の仕組みについて学びます。 '、* _'は有効な正規表現ではありません。 'java.util.regex.Pattern'のAPIドキュメントを参照してください。 – Jesper

+1

'String.replaceAll(" ._ "、" ");' – bdares

答えて

4

この私の作品:それはあなたが交換する必要があるかに依存し

String b = a.replaceAll("[\\w]_", ""); 

、私はクラス\ wの中だけで文字を検討しているが、あなたは何が好きと一致するように、この部分を微調整することができます。

+0

はい、それはかなり簡単です。私はこれが@ p2pnodeが必要とするものだと思います。 –

+0

ab_xx、bc_yyはaxx、byyを出しています。直前のキャラクターを失う_ – xyz

+1

私が言ったように...それを微調整する。私の表現は、\ wクラスに属している任意の文字をアンダースコアの前にマッチさせています。 1つ以上が必要な場合は、そのルールを "[\\ w] + _"として書き換えます。0以上が必要な場合は、+の代わりに*を使用します。 – pcalcao

2

*は、0個以上の発生を意味し、それ自体は何も意味しません。エラーです。あなたは何をしたいの0以上の出現箇所を指定する必要があります。

"a_x,b_y,c_z".replaceAll(",.*_", ",") 

することはできます:

a_x,y,z 

以上を:

[^_]_ではない任意の文字を意味
"a_x,b_y,c_z".replaceAll(",[^_]*_", ",") 

+0

"a_x、b_y、c_z" .replaceAll( "、[^ _] * _"、 "、")はうまく動作します。しかし、どのように最初の_を取り除くためにも? – xyz

+0

"a_x、b_y、c_z" .replaceAll( "、[^ _] * _"、 "、")replaceAll( "^ [^ _] * _"、 "") –

0
String input = "a_x,b_y,c_z"; 
for (String split : input.split(",")) 
{ 
    String output = split.split("_")[1]; 
    System.out.println(output); 
} 

xからyzに)ループの各反復のための可変output変化します。

+1

出力は "x \ ny \ nz "(\ nは新しい行です)。変数 'output'はループの繰り返しごとに変化します(" x "から" y "から" z "へ)。 – Hedja

+0

あなたはそうです、私はそれを変更しました。 – ZehnVon12

関連する問題