2017-07-01 6 views
1

こんにちは:D短い質問:両方がfunctionatingされているのででReplaceAll()

String geb = tf_datum.getText(); 
String sep = ""; //sep is short for seperator 

geb = geb.replaceAll("\\.", sep); 
geb = geb.replaceAll("\\,", sep); 
geb = geb.replaceAll("\\-", sep); 
geb = geb.replaceAll("\\ ", sep);` 

String geb = tf_datum.getText(); 

String sep = ""; 
geb = geb.replaceAll("\\.", Matcher.quoteReplacement(sep)); 
geb = geb.replaceAll("\\,", Matcher.quoteReplacement(sep)); 
geb = geb.replaceAll("\\-", Matcher.quoteReplacement(sep)); 
geb = geb.replaceAll("\\ ", Matcher.quoteReplacement(sep)); 

の違いは何ですか。私は2番目の方法でそれぞれの方法を理解しようとしましたが、それをまとめることには意味がありません。 誰かが私を助けることができれば、それはとてもいいですね!おかげさまで :)と私はまた別の質問which seems to be the sameを見つけましたが、彼はreplaceAll()の中でMatcher.quoteを使用しませんでした...同じであれば私はshureでなかったので

答えて

0

Matcherの場合、あなたは必要でない余分な仕事をしていますが、それでも効果的に同じことをします(ただし、この場合は無視できますが、効率的な価格を支払うと仮定します)。

最初のケースでは、geb.replaceAll("\\.", "")です。だからあなたはgebと言って、すべての期間を「何もない」本質的に置き換えてください。

2番目のケースでは、geb.replaceAll("\\.", Matcher.quoteReplacement(sep))を実行します。今度は、gebとし、すべてのピリオドをMatcher.quoteReplacement( "")の戻り値で置き換えてください。この場合、Matcher.quoteReplacementは ""を返します。したがって、本質的に不要な不要なコールです。ここMatcher.quoteReplacementのためのドキュメントを見てみましょう:

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#quoteReplacement(java.lang.String)

をそして、ここでString.replaceAll用:

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)

にquoteReplacementを使用するのですが、それはここでは言及しない一つのこと"\"や "$"のような制御文字の特殊な意味を抑止する。したがって、置換文字列(replaceAllの2番目の引数)が、文字が制御文字ではなく文字定数であるかのように振る舞うようにするには、これを使用する必要があります。

また、geb.replaceAll("[\\-\\,\\.\\s]", "");のように1つの正規表現でこれを行うことができます。私はそれよりも良い方法があると思うが、私の正規表現はあまり良くない。

+1

ありがとうございました。 "geb.replaceAll(" [\\ - \\、\\。\\ s] "、" ");"を使用しているデバイスは意味があり、コードはよりよく見えます今すぐ! – Jana