`
coconut_zhang
  • 浏览: 544274 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JAVA语言关于字符串替换的思考

    博客分类:
  • java
 
阅读更多

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

先来看我的代码:

 

  1. Newsdetials nt=(Newsdetials)ntIter.next();  
  2. System.out.println("新闻明细记录 "+nt);  
  3. String content=nt.getContent();  
  4. System.out.println("新闻的内容是 : "+content);  
  5. //转换字符串中的双引号为单引号  
  6. content.replaceAll("\"","'");  
  7. System.out.println("替换后的字符传是: "+content); 

 

程序解释:

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

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

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

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

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

 

  1. Newsdetials nt=(Newsdetials)ntIter.next();  
  2. System.out.println("新闻明细记录 "+nt);  
  3. String content=nt.getContent();  
  4. System.out.println("新闻的内容是 : "+content);  
  5. //转换字符串中的双引号为单引号  
  6. String content0=content.replaceAll("\"","'");  
  7. System.out.println("替换后的字符传是: "+content0); 

 

程序解释:

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

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

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

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

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

 

  1. public String replaceAll(String regex, String replacement)   
  2. {  
  3. return Pattern.compile(regex).matcher(this).replaceAll(replacement);  

 

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

 

  1. public String replaceAll(String replacement) {  
  2. reset();  
  3. boolean result = find();  
  4. if (result) {  
  5. StringBuffer sb = new StringBuffer();  
  6. do {  
  7. appendReplacement(sb, replacement);  
  8. result = find();  
  9. while (result);  
  10. appendTail(sb);  
  11. return sb.toString();  
  12. }  
  13. return text.toString();  

 

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

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

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

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

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

分享到:
评论

相关推荐

    java语言程序设计课后编程题答案答案

    4. **字符串处理**:Java中的String类提供了丰富的字符串操作方法,如拼接、查找、替换、分割等。编程题常常会测试字符串的处理能力,比如实现简单的文本分析功能。 5. **异常处理**:通过try-catch-finally语句块...

    java语言程序设计基础篇李娜译答案

    6. **字符串处理**:String类是Java中常用的数据结构,学习其构造、操作方法,如拼接、查找、替换等。 7. **集合框架**:了解ArrayList、LinkedList、HashSet、HashMap等集合类,以及泛型、迭代器的概念。 8. **...

    兰州大学java实验10

    10. **字符串处理**:String类在Java中广泛使用,实验可能包含字符串的操作,如拼接、查找、替换、分割等。 每个实验题目都是一个精心设计的挑战,旨在推动学生独立思考和解决问题。完成实验的过程中,学生不仅会...

    Java语言程序的设计——软件实验指导书.doc

    实验可能包括创建和遍历数组,以及使用String类的各种方法进行字符串的拼接、查找、替换等操作。 实验3:Java面向对象程序设计 Java是一种面向对象的语言,实验3将深入讲解类、对象、继承、封装和多态等核心概念。...

    java语言程序设计—软件实验指导书.doc

    这可能包括字符串的连接、查找、替换和分割等。实验可能要求编写程序找出特定模式的字符串或处理数组数据。 **实验3:Java面向对象程序设计** 实验3的重点在于理解类、对象、封装、继承和多态等面向对象的概念。...

    Java机试相关题目34题

    8. 字符串替换方法实现:字符串替换是指将字符串中的某些特定字符或字符串替换为其他字符或字符串。可以通过循环或者正则表达式来完成替换操作。 9. 金额转换问题:将阿拉伯数字形式的金额转换为中文大写金额,如...

    JAVA实验指导书

    实验五:Java语言的字符串类 这部分重点讲解String类的使用,包括字符串的创建、拼接、查找、替换等操作,以及StringBuffer和StringBuilder的使用场景和性能比较。 实验六:多线程基础编程 学习者将学习如何在Java...

    corejava练习题目(1)

    在数据类型方面,"CoreJava练习题目(1)"可能会提供一些习题来帮助学习者掌握Java语言中基本数据类型和引用数据类型的区别与用法,通过实际编程实践,加深对变量、数组和字符串等概念的理解。 控制流是编程中的另一...

    180个针对Java初学者的简单实例

    Java中的字符串是不可变对象,我们可以通过`String`类的各种方法进行拼接、查找、替换等操作。例如,`concat()`用于连接两个字符串,`indexOf()`和`substring()`用于检索和截取子字符串。 文件操作在Java中主要通过...

    java编辑器

    - 文本搜索与替换:能够在编辑区内查找指定字符串,并支持替换操作。 - 文件路径展示:显示当前编辑文件的完整存储路径。 - 常见文本编辑操作:提供剪切、复制、粘贴、删除等功能。 - 字体定制化:允许用户调整...

    初学者java作业题目

    4. **字符串操作**:Java中的String类提供了丰富的字符串处理功能,如字符串的连接、截取、查找、替换等。理解和熟练使用String类是必要的。 5. **面向对象编程**:这是Java的核心特性。你需要理解类和对象的概念,...

    java版剑指Offer

    这本书籍主要采用Java语言编写,覆盖了众多面试中常见的算法题目和数据结构问题,是帮助求职者提高编程能力和应对面试技巧的实用工具书。 在Java版的《剑指Offer》中,包括了一系列的算法和编程题目,每个题目都...

    Java编程题全集(50题及答案)

    例如,通过实现字符串处理的相关题目,学习者可以掌握Java中String类的常见方法,了解字符串拼接、替换、比较等操作的细节。同时,数组和集合的使用也是Java编程的基础,通过题目训练,可以加深对List、Set、Map等...

    JAVA练习题压缩文件

    6. **字符串处理**:掌握String类的操作,如字符串的拼接、查找、替换,以及StringBuilder和StringBuffer的动态构建字符串。 7. **多线程**:理解并发编程的概念,学习Thread类和Runnable接口,掌握同步机制...

    java SE第1次实验报告要求

    第2题可能涉及字符串操作,如字符串的连接、查找或替换;第3题可能要求实现一个简单的控制流程,比如判断一个数字是否为偶数;第4题可能涉及到数组的使用,如遍历数组并进行特定操作。在第2部分的题目中,你可能会...

    java编程50题 学习java必备

    4. **字符串处理**:String类的常用方法,字符串比较、拼接、查找、替换等操作。 5. **异常处理**:理解try-catch-finally语句,自定义异常的创建与抛出。 6. **IO流**:文件读写、缓冲流、对象序列化与反序列化,...

    很实用的java提高题

    这些题目可能会要求你进行字符串拼接、查找子串、替换字符等操作。 8. 异常处理:理解并学会使用try-catch语句来处理程序运行时可能出现的错误,是编写健壮代码的关键。 9. 面向对象编程:虽然这些题目可能是针对...

    高级语言程序设计历届试题

    7. **字符串处理**:学习字符串的基本操作,如字符串长度、拼接、查找、替换等。 8. **结构体与类**:理解面向对象编程的基本概念,掌握结构体和类的定义、对象的创建及成员访问。 三、算法与问题解决 9. **排序...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    nclob 1~4GB 保存本地语言字符集数据 blob 1~4GB 以二进制信息保存数据 三、 DDL语言 1. Create table命令 用于创建表。在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等  语法结构 create table...

Global site tag (gtag.js) - Google Analytics