2012-09-12 31 views
6

文字列中の "("と ")"をJavaのフルストップに置き換える方法は?私は次の方法で試しました: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) 

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

答えて

13

あなたが一度にでReplaceAllを使用することができます。

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

説明:

  • [()]マッチの両方()を、ブラケットは[]グループ内でエスケープする必要はありません。 (@Keppilで指摘したように)

EDIT:

も注意し、文字列urlを置き換えることによって変更されていない、それは単に交換して、新しいStringを返しますので、あなたがしなければならないだろう:正規表現と(だけでなく)などされている特殊文字を見込んでString#replaceAll

url = url.replaceAll("[()]", "."); 
+0

ありがとうございました。 – Neeraj

11

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

url = url.replaceAll("\\)", "."); 
url = url.replaceAll("\\(", ".") 
+0

あなたの答えには小さな間違いがあります。あなたは ")"だけを置き換えています。しかし、これはうまくいきません。あなたのロジックは "("。url = url.replaceAll( "\\("、 "。"); "(" – Neeraj

+0

@ Neeraj Corrected - thanks。 – munyengm

7

replaceAll()は、最初のパラメータとしてregexを期待し、括弧が特別な意味を持っています。代わりに

使用replace()

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

url =部分は交換の結果を保存することが重要であること。 Stringは変更不可なので、元のStringは変更されませんが、新しいものが作成されます。結果を保持するには、代わりにurlをポイントする必要があります。

+0

"url.replace" 、 "。")とurl.replaceAll( "\\("、 "。")はうまくいきます。ここでのポイントは "url = url.replace(...)"です。 –

+1

@emempe:はい、それも重要でしたが、OPの例のエラーは正規表現のエラーのためでした。私は 'url = 'part()も返されます。 – Keppil

+0

@Keppil .replaceを使って、最初のオカレンスだけを変換することができますか? – Neeraj

1

\を1つ追加すると、無効なエスケープされた特殊文字として\)を評価しようとするため、機能しません。

"\"を使用する必要があります。最初の\は2番目の文字をエスケープして "普通" \を生成し、次に)をエスケープして、正確に閉じたp​​aranthesis )に一致する正規表現を生成します。

汎用ソリューションはPattern.quoteです。これは任意の文字列を受け取り、その文字列と正確に一致する正規表現を返します。

0

方法(グループマーキング)ので、あなたはurl.replaceAll("\\)", ".");非特別なことにそれらをエスケープする必要があります。

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

詳細はJavaDocをご覧ください。

0

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

url.replaceAll("\)", "\."); 
0

使用

url.replaceAll("\\)", ".").replaceAll("\\(", ".");; 
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. 
1

あなたはまたorg.apache.commons.lang.StringUtils.replace(文字列を使用することができ、文字列、文字列)

よりapacheコモンズライブラリhttp://commons.apache.org/

関連する問題