6

文字列を変換する方法はありますか

"m1, m2, m3"

次へ

"m1/build, m2/build, m3/build"

方法だけでString.replaceAll(regex, replacement)

これまでのところ、これは私の最善の試みです。

System.out.println("m1, m2, m3".replaceAll("([^,]*)", "$1/build"));
>>> m1/build/build, m2/build/build, m3/build/build

ご覧のとおり、出力は正しくありません。ただし、Linuxのコマンドで同じ正規表現を使用すると、sed正しい出力が得られます。

echo 'm1, m2, m3' | sed -e 's%\([^,]*\)%\1/build%g'
>>> m1/build, m2/build, m3/build
4

2 に答える 2

5

問題をもう一方の端から見ると(文字通りかなり!)、コンテンツではなくターミネータを探す式が得られます。この式ははるかにうまく機能しました:

System.out.println("m1, m2, m3".replaceAll("(\\s*(,|$))", "/build$1"));

これがideoneのこのプログラムへのリンクです

于 2012-07-13T20:41:39.917 に答える
4

([^,]*)空の文字列と一致する可能性があり、2つのスペース間でも一致する可能性があります。([^,]+)またはを試してください(\w+)

$0もう1つのマイナーな注意-キャプチャされたグループを避けて、一致した文字列全体を参照するために使用できます。

System.out.println("m1, m2, m3".replaceAll("\\w+", "$0/build"));
于 2012-07-13T20:41:24.903 に答える