7

Javaで、文字列内のすべての「(」および「)」をフルストップに置き換える方法は? 私は次の方法で試しました:

String url = "https://bitbucket.org/neeraj_r/url-shortner)";
url.replaceAll(")", ".");
url.replaceAll(")", ".");

しかし、うまくいきません。エラーは次のとおりです。

Exception in thread "main" java.util.regex.PatternSyntaxException: Unmatched closing
')'
 )
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at com.azzist.cvConversion.server.URLChecker.main(URLChecker.java:32)

この問題はすべての正規表現にもあると思います。\前に追加)しても機能しませんでした。

4

9 に答える 9

17

一度に replaceAll を使用できます。

url.replaceAll("[()]", ".")

説明:

  • [()](と の両方に一致する場合、グループ)内で括弧をエスケープする必要はありません。[]

編集(@Keppilの指摘による):

また、文字列urlは置換によって変更されないことに注意してください。置換された新しい文字列を返すだけなので、次のようにする必要があります。

url = url.replaceAll("[()]", ".");
于 2012-09-12T08:13:46.033 に答える
14

'('')'"\\(""\\)"それぞれ エスケープする必要があります。

url = url.replaceAll("\\)", ".");  
url = url.replaceAll("\\(", ".")
于 2012-09-12T08:12:06.330 に答える
8

replaceAll()regexは最初のパラメーターとして を期待しており、そこでは括弧に特別な意味があります。

replace()代わりに 使用してください:

String url = "https://bitbucket.org/neeraj_r/url-shortner)";
url = url.replace("(", ".").replace(")", ".");

url =パーツは、置換の結果を保存するために重要であることに注意してください。Strings はimmutableであるため、オリジナルStringは変更されませんが、新しいものが作成されます。結果を保持するには、url代わりにこれを指す必要があります。

于 2012-09-12T08:12:41.793 に答える
2
  1. 文字列は不変です。
  2. )2 つのバックスラッシュでエスケープする必要があります。

したがって、コードは次のようになります。

String url = "https://bitbucket.org/neeraj_r/url-shortner)";
// is you need to escape all of them, use "[()]" pattern, instead of "\\)"
String s = url.replaceAll("\\)", "."); 
System.out.println(url);
System.out.println(s);

そして出力:

https://bitbucket.org/neeraj_r/url-shortner)
https://bitbucket.org/neeraj_r/url-shortner.
于 2012-09-12T08:17:18.530 に答える
1

正規表現を使用しない org.apache.commons.lang.StringUtils.replace(String, String, String) を使用することもできます

Apache Commons ライブラリからhttp://commons.apache.org/

于 2012-09-12T10:23:01.273 に答える
1

単一の追加は機能しません。これは、エスケープされた特殊文字として\評価しようとするためです。\)

「\)」を使用する必要があります。1\番目は 2 番目をエスケープし、"normal" を生成します\。これは をエスケープし)、右括弧 と正確に一致する正規表現を生成し)ます。

一般的な目的の解決策はPattern.quote、任意の文字列を取り、その文字列に正確に一致する正規表現を返す を使用することです。

于 2012-09-12T08:13:03.180 に答える
0

使用する

url.replaceAll("\\)", ".").replaceAll("\\(", ".");;
于 2012-09-12T08:14:11.543 に答える
0

メソッドString#replaceAllは正規表現を想定して(おり)、特殊文字 (グループをマークする) であるため、それらをエスケープして non-special にする必要がありますurl.replaceAll("\\)", ".");

また、両方の文字を一度に pattern に置き換えることもできますurl.replaceAll("[()]", ".");。このコンテキストでは、括弧がエスケープされていないことがわかります。これは regEx コンテキストによるものです - 内部には[]特別な意味はありません。

詳細については、JavaDocを参照してください。

于 2012-09-12T08:13:46.440 に答える
0

は正規表現の文字なので)、エスケープする必要があります。これを試して:

url.replaceAll("\)", "\.");
于 2012-09-12T08:13:48.220 に答える