2014-04-28 49 views
0

我目前處於一片泡菜中。將所有非字母數字更改爲+

我有一個用戶輸入地址的文本框,然後將其作爲url的一部分發送。

目前,我的解決方案可以很好地處理單個單詞 - 比如說「Brighton」。 但是,如果用戶想要在查詢中添加更多細節 - 比如街道地址,我會遇到問題。

32悉尼街,布萊頓,城市布賴頓BN1 4EP的,英國

什麼將其更改爲最好的方式 - 我覺得一個正則表達式會做,但我我總是與他們鬥爭。

32 +悉尼+街+布賴頓+的+市+ + +布賴頓和霍夫+ + + BN1 4EP +英國

目前我在做這個 - 我認爲這是凌亂的,還有,只是沒有很好的編程。 如果我添加條件語句爲「++」

String[] strArray = str.split(" "); 
int strSize = strArray.length; 

// Puts the split array back together, and add a plus between the words 
str = ""; 
for (int i = 0; i < strSize; i++) { 
    if (i < (strSize - 1)) 
     str += strArray[i] + "+"; 
    else 
     str += strArray[i]; 
} 

return str; 

我想運行在一排有兩個++(這將無效URL)的風險的所有方式它會得到更多的毛,或者真的是「粗暴」的代碼。

感謝您的時間

+4

只是做一個正則表達式替換 「+」 「沒有字字符或數字」 的 - 'S/[\ W \ d] +/+ /'。 – maerics

+3

應該有一個緊密的理由標籤爲「給我的代碼」。 – maerics

+0

使用你正在考慮的方式,然後使用while循環將++的所有實例替換爲+ ...? –

回答

1

奧利,這應該這樣做:

try { 
    String resultString = subjectString.replaceAll("(?i)[^a-z0-9]+", "+"); 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} catch (IllegalArgumentException ex) { 
    // Syntax error in the replacement text (unescaped $ signs?) 
} catch (IndexOutOfBoundsException ex) { 
    // Non-existent backreference used the replacement text 
} 
+0

謝謝,這工作得很好:)這給了我雙加號的問題(如果用戶留下一個逗號和一個空格) - 我可能不得不想出另一個正則表達式來將所有的+ *變成+,但它是現在完美。 感謝您的時間:) – Ollie

+0

@Ollie感謝您的反饋。如果你給我一個問題字符串的例子,我可以看看它。 – zx81

+0

感謝您的時間:)例如,如果用戶輸入「32悉尼街,布賴頓,布萊頓市和Hove BN1 4EP,英國」(注意逗號和空格),結果爲「32 + Sydney + Street ++布萊頓++ +布萊頓+的+市+和+霍夫+ BN1 + 4EP ++英國」。 – Ollie

相關問題