我試圖用不同的值替換幾個不同的字符。例如,如果我有:#love hate
那麼我想要做的是回來%23love%20hate
使用正則表達式對URL字符串進行編碼
這是否與團體有關?我試圖理解使用組,但我真的不明白。
我試圖用不同的值替換幾個不同的字符。例如,如果我有:#love hate
那麼我想要做的是回來%23love%20hate
使用正則表達式對URL字符串進行編碼
這是否與團體有關?我試圖理解使用組,但我真的不明白。
你可以試着這樣做:
String encodedstring = URLEncoder.encode("#love hate","UTF-8");
它會給你你想要的結果。要扭轉它,你應該這樣做:
String loveHate = URLDecoder.decode(encodedstring);
您不需要RegEx來替換單個字符。 RegEx對於這樣的組合來說是一種矯枉過正。您可以在循環中簡單地使用String類的普通替換方法來替換每個要替換的字符。
String output = input.replace("#", "%23");
output = output.replace(" ", "%20");
你想要替換多少個這樣的字符?
不,您將需要多次替換。另一種選擇是使用group來查找下一個出現的幾個字符串中的一個,檢查字符串是什麼並且可以使用地圖進行適當替換。
如果你想編碼URL爲UTF-8或使用現有的類中的某些編碼會更容易
如。
公地httpclient的項目
URIUtil.encodeWithinQuery(input,"UTF-8");
正如墊說,解決這個問題的最好方法是使用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()
看到所匹配的字符串,然後以此爲基礎進行定製替換。可以使用此技術通過在地圖上查找它們替換$ {}變量等
感謝您的答覆,我也許需要像如果我要repalce幾個大字:I路愛你那麼輸出會必須是%23i%20love%20you。並感謝你生病了看看它 – BeginnerPro 2011-01-07 16:09:57
Np。但是甚至有幾十個這樣的語句比使用單一的RegEx編譯效率更高。 – adarshr 2011-01-07 16:12:08