2014-04-28 27 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

相关问题