解决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方法发送数据的时候, 字符串中所有的"+"都没有了. 所以我想在服务器端把所有的"+"先替换成"[和]",等发送回来的时候再把"[和]"替换成"+".结果就碰到以上问题了. 相信大家一定又更好的解决方法,请告诉我,谢谢!
//////////////////引文/////////////////
问题:
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方法发送数据的时候, 字符串中所有的"+"都没有了. 所以我想在服务器端把所有的"+"先替换成"[和]",等发送回来的时候再把"[和]"替换成"+".结果就碰到以上问题了. 相信大家一定又更好的解决方法,请告诉我,谢谢!
相关文章推荐
- 如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
- 解决"应用程序无法启动,因为应用程序的并行配置不正确"的问题(VS2008 + qt)
- 解决Linux下Qt编译出现"cannot find -lGL"以及无法安装libgl1-mesa-dev的问题
- 关于在英创em9161板上使用ADO.net连接远程数据库提示 “无法找到 PInvoke dll"dbnetlib.dll"”问题解决方法
- SQLNCLI" 无法启动分布式事务"问题的解决思路
- 解决无法显示"文件夹选项"问题的办法
- 编译eclair碰到java version "1.5.0_18"问题的解决
- 关于note2等(Android4.1版本)以上无法启动支付宝的问题"java.security.spec.InvalidKeySpecException"
- Java 递归解决 "仅仅能两数相乘的计算器计算x^y" 问题
- Windows 2003 +iis 6.0 中Silverlight错误,无法下载Silverlight应用程序。请查看Web服务器设置." 问题的解决方法
- VS2005 解决"应用程序配置不正确,程序无法启动"问题
- 解决 iOS7.1企业应用"无法安装应用程序 因为证书无效"的问题
- vs.net2003中解决"无法在web服务器上启动调试"问题一例
- 无法打开文件"LIBC.lib"问题解决
- 解决用<img src="<%# Eval("ShowPhoto")%>"动态绑定图片,发布到IIS上无法显示的问题
- 关于note2等(Android4.1版本)以上无法启动支付宝的问题"java.security.spec.InvalidKeySpecException"
- An internal error occurred during: "Add Deployment". java.lang.NullPointException 问题解决
- 解决"java.lang.UnsatisfiedLinkError: Native Library xxx.dll already loaded in another classloader"问题
- 使用JVM管理工具jvisualvm,系统提示"无法检测到本地java应用程序"的原因和解决办法
- 关于无法显示该网页,弹出对话框显示"Internet Explorer无法打开Internet站点xxx,已终止操作"问题的解决方法