网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java进阶之字符串替换的思考     
  文章作者:未知  文章来源:水木森林  
  查看:70次  录入:管理员--2007-11-17  
 
    最近在开发的过程中用到了字符串的替换, 本来觉得挺简单的问题,却总也解决不了。字符串明明是替换了,却总也输出不了正确结果,很是郁闷,到底是为什么呢?
    先来看我的代码:
     newsdetials nt=(newsdetials)ntiter.next();
     system.out.println("新闻明细记录    "+nt);
     string content=nt.getcontent();
     system.out.println("新闻的内容是  :     "+content);
     //转换字符串中的双引号为单引号
     content.replaceall("/"","'");
     system.out.println("替换后的字符传是:     "+content);
    程序解释:
        程序的前部分是通过迭代器来遍历新闻的明细记录。
        我的目的是想用双引号来替换掉字符串中的单引号。
        以上是我开始使用的方法,我输出的结果是什么呢?也许你会和我当初的想法相同?输出的是替换后的内容。
        答案是错的。输出的内容和其替换前的内容相同。明明替换了,这是为什么呢?我也是好久都没找到答案。
        一个偶然的机会,让我实现了我的目的。我的实现如下:
     newsdetials nt=(newsdetials)ntiter.next();
     system.out.println("新闻明细记录    "+nt);
     string content=nt.getcontent();
     system.out.println("新闻的内容是  :     "+content);
     //转换字符串中的双引号为单引号
     string  content0=content.replaceall("/"","'");
system.out.println("替换后的字符传是:     "+content0);
程序解释:
这一段代码看上去和前段相同,但却实现了我的目的。

我很是不解,就看了一下源代码,才发现其中的奥妙。我们分析一下上面的两段程序:
唯一的不同点是:后者将替换后的字符串赋给了另一个字符串变量,也就是说将替换后的字符串取出,而前者没有。也就是这一点导致了结果的不同。
于是我就查看了其实现的源代码:
我们来看string的replaceall()方法的实现:
    public string replaceall(string regex, string replacement) {
        return pattern.compile(regex).matcher(this).replaceall(replacement);
    }
我们可以看到,其最终是调用了matcher(this).replaceall(replacement)方法来实现的,我们看其是怎么实现的:
    public string replaceall(string replacement) {
        reset();
        boolean result = find();
        if (result) {
            

stringbuffer sb = new stringbuffer();


            do {
                appendreplacement(sb, replacement);
                result = find();
            } while (result);
            appendtail(sb);
            return sb.tostring();
        }
        return text.tostring();
    }

看这一段代码让我们明白了一切:
我们知道在java中,如果传递的是对象,那么是址传递,所以让我们以为,让原字符串替代后就可以了。同时我们调用了该字符串的替代方法,直接就修改了其串的值。 
上面的代码告诉我们,错了。
因为粗体的部分产生了一个新的对象:stringbuffer的一个实例,而返回的是他的串值,而不是原来的content。
到此,你是否也弄明白了呢??
 
 
上一篇: 在java中对数组a[depth]的理解    下一篇: 开源技术之tomcat数据源配置总结
  相关文档
websphere mq程序设计初探 11-17
用javascript实现网页特效二例 11-16
java模式设计之多态模式与多语言支持 11-17
java的建造设计模式 11-17
jdon版jive在resin-2.1.4和sqlserver2000环境下安装手册 11-17
jsp中连接sql2000数据库的问题总结 11-17
java初学者福音——自动设置环境变量 11-17
uploadbean源代码 11-17
在java中使用枚举 11-17
java编程实现列表框元素动态变化 11-16
设计模式:JDK Observer设计模式之研究 08-06
网友杂谈各种app server 11-17
怎样设计合适的接口 11-16
新手入门:jsp基本语法与简单表单处理 11-16
解析java对象引用与jvm自动内存管理 11-17
高效简单的 jsp 分页代码分析 11-17
java服务器 感受开源热潮 11-17
实用工具类库java.util(1) 11-16
配置weblogic server集群一(组图) 11-17
sun国际认证考试指定考试考场 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息