2011-01-07 119 views

回答

6

你可以試着這樣做:

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

它會給你你想要的結果。要扭轉它,你應該這樣做:

String loveHate = URLDecoder.decode(encodedstring); 
3

您不需要RegEx來替換單個字符。 RegEx對於這樣的組合來說是一種矯枉過正。您可以在循環中簡單地使用String類的普通替換方法來替換每個要替換的字符。

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

你想要替換多少個這樣的字符?

+0

感謝您的答覆,我也許需要像如果我要repalce幾個大字:I路愛你那麼輸出會必須是%23i%20love%20you。並感謝你生病了看看它 – BeginnerPro 2011-01-07 16:09:57

+0

Np。但是甚至有幾十個這樣的語句比使用單一的RegEx編譯效率更高。 – adarshr 2011-01-07 16:12:08

1

不,您將需要多次替換。另一種選擇是使用group來查找下一個出現的幾個字符串中的一個,檢查字符串是什麼並且可以使用地圖進行適當替換。

1

我認爲你想要實現的是一種URL編碼,而不是純粹的替換。

查看SO的這個主題的一些答案,特別是有7票可能對你更有趣的那個。

HTTP URL Address Encoding in Java

2

如果你想編碼URL爲UTF-8或使用現有的類中的某些編碼會更容易

如。

公地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()看到所匹配的字符串,然後以此爲基礎進行定製替換。可以使用此技術通過在地圖上查找它們替換$ {}變量等

相關問題