您的位置:首页 > 编程语言 > Java开发

解决java中无法在replaceAll替换"+"的问题

2006-12-17 12:50 459 查看
先看一下其他文章的解决方法吧:

//////////////////引文/////////////////

问题:

String s1="111+222+333";

System.out.println(s1.split("+").length);

//输出时提示错误: java.util.regex.PatternSyntaxException: Dangling meta character ''+'' near index

问题出现在加号附近,查询相关的资料显示,+、*、|、等符号在正则表达示中有相应的不同意义。

正则表达式的基本用法 zt

1、“.”为通配符,表示任何一个字符,例如:“a.c”可以匹配“anc”、“abc”、“acc”;

2、“[]”,在[]内可以指定要求匹配的字符,例如:“a[nbc]c”可以匹配“anc”、“abc”、“acc;

但不可以匹配“ancc”,a到z可以写成[a-z],0到9可以写成[0-9];

3、数量限定符号,表示匹配次数(或者叫做长度)的符号:

包括:

“*”??0次或者多次

“+”??1次或者多次

“?”??0次或者1次

“{n}”??匹配n次,n为整数

“{n,m}”??匹配从n到m之间的某个数的次数;n和m都是整数;

“{n,}”??匹配n到无穷次之间任意次数;

“{,m}”??匹配0到m之间任意次数;

(以下略去n行) ......

明白了这些以后,我们再返回头看看它们如何被运用呢?一般来讲只需要加[]、或是/即可。

举例来讲:

String s1="111+222+333";

System.out.println(s1.split("[+]").length);

或是

String s1="111+222+333"; System.out.println(s1.split("/+").length);

其他用法类同。

//////////////////引文结束/////////////////

怎么样,基本明白是怎么回事了吧. 也就是说如果想用replaceAll替换"+"要这样写:

String temp = "牛奶+面包";

temp = temp.replaceAll("[+]", "和");

这时temp = "牛奶和面包";并且不会抛出异常. 这是没问题的.

但若想把"和"再替换回"+",问题就出现了.

String temp = "牛奶和面包";

temp = temp.replaceAll("和", "+");

结果是temp = "牛奶[+]面包";这并不是原来的字符串,而且如果要是这么写:

String temp = "牛奶和面包";

temp = temp.replaceAll("和", "[+]");

则temp = "牛奶[[+]]面包";差的更远了.当然别的方法我没有实验.如果大家又什么用replaceAll就可以解决的好办法可以告诉我.

我的解决方法如下,这里不能使用replaceAll了:

while(temp.lastIndexOf("和") != -1)

temp = temp.substring(0,temp.lastIndexOf("和")) + "+"

+ temp.substring(temp.lastIndexOf("和")+1);

这回temp = "牛奶+面包"; 终于又变成原来的样子了!

顺便提一下这个问题的来源:

我在项目中用ajax时要从服务读取数据库中的字符串数据发到客户端,客户选择相应的数据后要把这个字符串发送回来并在数据库中查找相应的详细数据.可是从客户端向服务器用get方法发送数据的时候, 字符串中所有的"+"都没有了. 所以我想在服务器端把所有的"+"先替换成"[和]",等发送回来的时候再把"[和]"替换成"+".结果就碰到以上问题了. 相信大家一定又更好的解决方法,请告诉我,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐