首页 > 其他 > 详细

String的replace()方法和replaceAll()使用

时间:2015-10-26 13:56:21      阅读:274      评论:0      收藏:0      [点我收藏+]

java.lang.String类为替换字符串提供了2个方法replace()和replaceAll(),从字面意思理解,replace()是将字符串中出现的所有字符(串)用指定的字符(串)替换,要注意是所有的字符(串),如

String str = "q2?12?ew";
str = str.replace("?", "");
System.out.println(str);
结果:q212ew

如果将“?”进行转义,则结果却不一样

String str = "q2?12?ew";
str = str.replace("\\?", "");
System.out.println(str);
结果:q2?12?ew

因为str.replace("\\?", "")表示将str字符串中出现"\\?"的字符全部替换为""。如果想用正则表达式替换字符串,这时就需要使用replaceAll方法了,这个方法是专门为正则表达式设计的,replaceAll(String regex, String replacement)第一个参数是正则表达式,第二个参数是待替换的值。其中正则表达式的关键字有

字符 说明
^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
$ 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
( ) 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
[ ] ?用来自定义能够匹配 ‘多种字符‘ 的表达式。要匹配中括号,请使用 "\[" 和 "\]"??
{ } 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"???
.

匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."?

?
? 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"?
+ 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"?
* 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"??
| 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"
String str = "q2?12?ew";
str = str.replaceAll("?", "");
System.out.println(str);
结果:Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character ‘?‘ near index 0
因为"?"是修饰匹配次数为 0 次或 1 次,所以"?"不是一个正确的正则表达式,若要能正确运行,需要将"?"进行转义,代码为:str = str.replaceAll("\\?", "");

    此时如果运行一下代码,情况则又完全不一样了

String str = "q2.12.ew";
str = str.replaceAll(".", "");
System.out.println(str);
结果:空字符串,因为"."表示匹配除了换行符以外的任意字符,"q2.12.ew"字符串所有的字符均符合替换规则,所以全部被替换成""。此时需要将"."进行转义,代码为:str = str.replaceAll("\\.", "");

但是转义符也不能乱用,不能将不是正则表达式所规定的特殊字符进行转义,否则结果会出乎意料,用如下代码说明

String str = "q2.12.ew";
str = str.replaceAll("\\2", "");
System.out.println(str);
结果:q2.12.ew。相当于字符串没被替换,因为此时是查找"q2.12.ew"字符串,将其中的"\\2"字符串替换成"",注意是"\\2"字符串

String的replace()方法和replaceAll()使用

原文:http://my.oschina.net/u/732520/blog/522065

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!