将所有非字母数字更改为+

时间:2014-04-28 20:39:01

标签: java regex string string-formatting alphanumeric

我现在有点发脾气。

我有一个用户输入地址的文本框,然后作为网址的一部分发送。

目前,我用一个单词很好地解决了这个问题 - 比如说“布莱顿”。 但是,如果用户想要在查询中添加更多细节 - 例如街道地址,我会遇到问题。

  

32 Sydney Street,Brighton,City of Brighton and Hove BN1 4EP,UK

改变它的最佳方法是什么 - 我认为正则表达式会做到这一点,但我总是与它们斗争。

  

32 + + +布赖顿和+霍夫+ BN1 + 4EP + UK的悉尼+街+布赖顿+的+市+

我目前正在这样做 - 我觉得这很麻烦,而且好,只是编程不好。 如果我为'++'添加条件,那就更加严重了

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;

我正在考虑的所有方式都冒着连续使用两个++的风险(这会使网址无效),或者真的是“严重”的代码。

感谢您的时间

1 个答案:

答案 0 :(得分:1)

Ollie,这应该这样做:

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
}