4

Java では、文字列の後にスペースを挿入したいのですが、カンマの後の文字に数字または文字が続く場合に限ります。正規表現をパラメーターとして使用する replaceAll メソッドを使用したいと考えています。これまでのところ、次のものがあります。

String s1="428.0,chf";
s1 = s1.replaceAll(",(\\d|\\w)",", ");   

このコードは、上記の文字列と、コンマの後に既にスペースがある文字列を正しく区別しています。私の問題は、スペースが挿入されるように式を記述する方法がわからないことです。上記のコードは、上記の文字列の c をスペースに置き換えます。これは私が望むものではありません。

s1を実行すると、次のようになりますreplaceAll"428.0 chf"

4

4 に答える 4

4
s1.replaceAll(",(?=[\da-zA-Z])"," ");  

(?=[\da-zA-Z])は、positive lookahead後に数字または単語を検索するaです,。この先読みは、結果に含まれないため、置き換えられません。これは単なるチェックです。

ノート

\w数字、アルファベット、およびが含まれます。_したがって、の必要はありません\d

それを表現するためのより良い方法は、 2つの一致を必要としないものも含まれているので[\da-zA-Z]代わりになります\w\w_

于 2012-10-10T17:01:38.930 に答える
2

$1これを試して、一致したグループ化を参照していることに注意してください。

s1.replaceAll(",(\\d|\\w)"," $1");

String.replaceAll()と同じように機能することに注意してくださいMatcher.replaceAll()ドキュメントから:

置換文字列には、キャプチャされたサブシーケンスへの参照が含まれる場合があります

于 2012-10-10T17:01:06.670 に答える
2
String s1="428.0,chf";
s1 = s1.replaceAll(",([^_]\\w)"," $1"); //Match alphanumeric except '_' after ','
System.out.println(s1);

出力: -

428.0 chf

sinceは,と, So に\wマッチし、 from ..を否定します。digitswords,underscore[^_]underscore\w

$1cキャプチャされたグループを表します..ここの後にキャプチャしたので、->,に置き換えます..「_」はスペースを表します..c_$1_c

于 2012-10-10T17:02:44.030 に答える
0

これを試して....

public class Tes {

    public static void main(String[] args){

        String s1="428.0,chf";

        String[] sArr = s1.split(",");

        String finalStr = new String();

        for(String s : sArr){

            finalStr = finalStr +" "+ s;
        }

        System.out.println(finalStr);

    }

}
于 2012-10-10T17:08:16.527 に答える