2011-01-07 12 views
2

私はいくつかの異なる文字を異なる値に置き換えようとしています。たとえば、私が持っている場合:#love hateそれから私はしたいと思います%23love%20hateURL文字列を正規表現でエンコードする

グループとは何か?私はグループを使って理解しようとしましたが、本当に理解できませんでした。

答えて

6

あなたはこれをしようとすることができます:

String encodedstring = URLEncoder.encode("#love hate","UTF-8"); 

それはあなたが望む結果が得られます。それをREVERSするには、この操作を行う必要があります。

String loveHate = URLDecoder.decode(encodedstring); 
+0

どのように私はそれを逃しました! :) – adarshr

+0

まさに私が必要としてくれたことありがとう=)あなたは多くの子供がいて、繁栄しているかもしれない – BeginnerPro

3

単一文字を置き換えるためにRegExは必要ありません。 RegExはそのようなポーズのための過剰なものです。置き換えたい文字ごとに、単純にStringクラスのプレーン置換メソッドをループ内で使用することができます。

String output = input.replace("#", "%23"); 
output = output.replace(" ", "%20"); 

置き換えたい文字数はいくつですか?

+0

返信ありがとうございます。私は次のようにいくつかの文字をrepalceする必要があります。 %23i%20love%20youにする必要があります。そしてあなたに病気をありがとうございました – BeginnerPro

+0

Np。しかし、そのようなステートメントを数十回も持つことは、単一のRegExコンパイルを使用するよりはるかに効率的です。 – adarshr

1

いいえ、複数の置換が必要です。もう1つの選択肢は、groupを使用して、いくつかの文字列の1つの次の文字列を検索し、その文字列が何であるかを検査し、おそらくマップを使用して適切に置き換えます。

1

私は何を達成したいことはURLエンコードの代わりに、純粋な交換のようなものだと思います。

このスレッドは、特にあなたのためにもっと興味深いかもしれない7票を持つこのスレッドに関するいくつかの回答を参照してください。

HTTP URL Address Encoding in Java

2

あなたはUTF-8にURLをエンコードしようとしているか、または既存のクラスを使用して、いくつかのエンコーディングは、例えば

はるかに容易になります。マットが言ったように

コモンズ-HTTPClientのプロジェクトが

URIUtil.encodeWithinQuery(input,"UTF-8"); 
1

、この問題を解決するための最良の方法は、のURLEncoderです。あなたが正規表現を使う、という場合は、その後、java.util.regex.Matcher.appendReplacementのドキュメントのサンプルコードを参照してください。

Pattern p = Pattern.compile("cat"); 
Matcher m = p.matcher("one cat two cats in the yard"); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, "dog"); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

をループ内では、マッチした部分文字列を参照して、それに基づいてカスタム置換を行うためにm.group()を使用することができます。このテクニックは、$ {variables}を地図などで見て置き換えることによって使用できます。