replaceall报错,replace replaceall
java中replaceAll的用法,不同的用法为什么会报错
StringBuilder 可以用repalce方法。
其实你这里都可以用这个方法,效果和repalceAll是一样的,代码如下:
package?mytest;
//replace替换匹配字符串
public?class?test?{
????public?static?void?main(String[]?args)?{
????????String?s1?=?"上海自来水来自海上";
????????System.out.println(s1.replace("自来水",?"*"));//将“自来水”三个字替换为“*”
????????
????????StringBuilder?s2?=?new?StringBuilder();
????????s2.append("大家好").append("这是苍井空").append("老师");
????????System.out.println(s2.replace("苍井空","井空"));
????????
????}
}
replaceAll方法比replace方法功能主要是多了可以用正则表达式来匹配字符串,你这里没有用正则,用replace方法就好,而且String 和 StringBuilder都有这个方法
java中,replaceAll方法中的问题
public String replaceAll(String regex,
String replacement)使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。
此方法调用的 str.replaceAll(regex, repl) 形式产生与以下表达式完全相同的结果:
Pattern.compile(regex).matcher(str).replaceAll(repl)
参数:
regex - 用来匹配此字符串的正则表达式
replacAll要用正则表达式,所以[*]就可以,[*]表示*
JAVA中string.replace和string.replaceAll的区别及用法
JAVA中string.replace()和string.replaceAll()的区别及用法乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样。
public String replace(char oldChar,char newChar)?
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。 如 果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用。否则,创建一个新的 String 对象,用来表示与此 String 对象表示的字符序列相等的字符序列,除了每个出现的 oldChar 都被一个 newChar 替换之外。?
public String replaceAll(String regex,String replacement)使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。此方法调用的 str.replaceAll(regex, repl) 形式产生与以下表达式完全相同的结果:??
Pattern.compile(regex).matcher(str).replaceAll(repl)?
参数:?
regex - 用来匹配此字符串的正则表达式??
返回:得到的 String??
抛出: PatternSyntaxException - 如果正则表达式的语法无效。
如果我有以下的字符串:
String?x=?"[kllkklk\\kk\\kllkk]";
要将里面的“kk”替换为++,可以使用两种方法得到相同的结果??
replace(CharSequencetarget,?CharSequencereplacement)??——x.replace("kk",?"++")
replaceAll(Stringregex,?Stringreplacement)???????——x.replaceAll("kk",?"++")
可见两个函数在处理上述字符串的时候没有什么区别,
下面将字符串中的“\\”替换为“++”
??System.out.println(x.replace("\\","++"));???//没有问题
??System.out.println(x.replaceAll("\\","++"));??//报错java.util.regex.PatternSyntaxException
可见,当使用转义字符进行替换的时候,是有区别的。
replaceAll的参数就是regex,是正则表达式。首先会转义,所以报错。
如果使用System.out.println(x.replaceAll("\\\\","++"));即可完成。
那么在使用普通的字符串替换时,选用哪一个函数呢?
String?x=?"[kllkklk\\kk\\kllkk]";
??String?tmp;
??//System.out.println(x.replace("[",?"#").replace("]","#"));
??System.out.println(new?Date().getTime());
??for(int?i?=0;i1000000;i++)
???tmp=x.replace("kk",?"--");
??System.out.println(new?Date().getTime());
??for(int?i?=0;i1000000;i++)
???tmp=x.replaceAll("kk",?"++");
??System.out.println(new?Date().getTime());
测试结果:
1312424571937
1312424574531
1312424576671
根据测试replaceAll函数要更快一些。看源码发现,replace函数里面仍使用replaceAll函数。
总体原则:
当字符串无法确定是否具有转义字符时,而且也不需要转义时,建议使用replace函数
否则,使用replaceAll函数
JAVA中String的replaceAll问题
之所以出错是因为
String的replaceAll是采用“正则表达式”的方式替换。
在正则表达式中
\ (一个斜线)是用 \\ 来表示(即:用两个斜线表示一个斜线)
而在Java语言中 \ (一个斜线)是用 \\ 来表示。(即:也用两个斜线表示一个斜线)
所以正则表达式为两个斜线("\\")的写法,在Java语言中要用4个斜线来表示"\\\\"
(即: 一个"现实中的斜线" 在 正则表达式中用2个斜线来表示,而在Java中2个斜线要用4个斜线来表示)
所以代码如下:
/*
例如: str = "\\\\"; 实际上是表示2个斜线。
你的目的是将2个"实际"斜线 替换为4个"实际斜线"
需要编写如下代码
*/
// str的实际内容是\\ (即两个斜线)
String str = "\\\\";
//将str中的两个斜线,转换为两个双斜线(即: 4条斜线)
str = str.replaceAll("\\\\", "\\\\\\\\");
System.out.println(str);
看着有些晕吧。。。呵呵~~
没办法。。。只能这样写。。。。
你可以去学习一下正则表达式。
正则表达式说简单也简单,说难那还真够难的。
关键是用正则表达式去写什么东西。
曾经写过一个判断日期的正则表达式。。。。
我靠。。。居然写了N行。。。。
写完了,过2天,自己都不认识了。。。
java replaceAll报错java.lang.IllegalArgumentException,求助帮分析
$和\在replacement属于特殊字符
需要转义
System.out.println("编号为:NUM的NAME已经超出信用期限".replaceAll("NUM", "T\\$-XC1209260004"));