J2SE应用:JAVA语言关于字符串替换的思考

HK神右手

HK神右手

2016-02-19 20:59

有了下面这个J2SE应用:JAVA语言关于字符串替换的思考教程,不懂J2SE应用:JAVA语言关于字符串替换的思考的也能装懂了,赶紧get起来装逼一下吧!

最近在开发的过程中用到了字符串的替换,本来觉得挺简单的问题,却总也解决不了。字符串明明是替换了,却总也输出不了正确结果,很是郁闷,到底是为什么呢?

先来看我的代码:

Newsdetialsnt=(Newsdetials)ntIter.next();

System.out.println("新闻明细记录"+nt);

Stringcontent=nt.getContent();

System.out.println("新闻的内容是:"+content);

//转换字符串中的双引号为单引号

content.replaceAll(""","'");

System.out.println("替换后的字符传是:"+content);

程序解释:

程序的前部分是通过迭代器来遍历新闻的明细记录。

我的目的是想用双引号来替换掉字符串中的单引号。

以上是我开始使用的方法,我输出的结果是什么呢?也许你会和我当初的想法相同?输出的是替换后的内容。

答案是错的。输出的内容和其替换前的内容相同。明明替换了,这是为什么呢?我也是好久都没找到答案。

一个偶然的机会,让我实现了我的目的。我的实现如下:

Newsdetialsnt=(Newsdetials)ntIter.next();

System.out.println("新闻明细记录"+nt);

Stringcontent=nt.getContent();

System.out.println("新闻的内容是:"+content);

//转换字符串中的双引号为单引号

Stringcontent0=content.replaceAll(""","'");

System.out.println("替换后的字符传是:"+content0);

程序解释:

这一段代码看上去和前段相同,但却实现了我的目的。

我很是不解,就看了一下源代码,才发现其中的奥妙。我们分析一下上面的两段程序:

唯一的不同点是:后者将替换后的字符串赋给了另一个字符串变量,也就是说将替换后的字符串取出,而前者没有。也就是这一点导致了结果的不同。

于是我就查看了其实现的源代码:

我们来看String的replaceAll()方法的实现:

publicStringreplaceAll(Stringregex,Stringreplacement){

returnPattern.compile(regex).matcher(this).replaceAll(replacement);

}

我们可以看到,其最终是调用了matcher(this).replaceAll(replacement)方法来实现的,我们看其是怎么实现的:

publicStringreplaceAll(Stringreplacement){

reset();

booleanresult=find();

if(result){

StringBuffersb=newStringBuffer();

do{

appendReplacement(sb,replacement);

result=find();

}while(result);

appendTail(sb);

returnsb.toString();

}

returntext.toString();

}

看这一段代码让我们明白了一切:

我们知道在java中,如果传递的是对象,那么是址传递,所以让我们以为,让原字符串替代后就可以了。同时我们调用了该字符串的替代方法,直接就修改了其串的值。

上面的代码告诉我们,错了。

因为粗体的部分产生了一个新的对象:StringBuffer的一个实例,而返回的是他的串值,而不是原来的content。

到此,你是否也弄明白了呢??

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

J2SE应用:JAVA语言关于字符串替换的思考

编程语言 网络编程
J2SE应用:JAVA语言关于字符串替换的思考

J2SE综合-关于字符串的一些处理技巧

编程语言 网络编程
J2SE综合-关于字符串的一些处理技巧

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何掌握Java(J2SE篇)

编程语言 网络编程
如何掌握Java(J2SE篇)

正则替换字符串功能

Web开发
正则替换字符串功能

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

java字符串的合并

编程语言 网络编程
java字符串的合并

java 字符串匹配函数

Web开发
java 字符串匹配函数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Asp.Net中使用水晶报表

Asp.Net中使用水晶报表

解决Windows XP SP2常遇的问题

解决Windows XP SP2常遇的问题
下拉加载更多内容 ↓