replaceall报错,replace replaceall

http://www.itjxue.com  2023-01-07 21:10  来源:未知  点击次数: 

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"));

(责任编辑:IT教学网)

更多

相关Access文章

推荐Access文章