`
alex8946
  • 浏览: 366342 次
  • 性别: Icon_minigender_1
  • 来自: 广东广州
社区版块
存档分类
最新评论

java进阶之字符串替换的思考

阅读更多

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

先来看我的代码:

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 字符串应用笔记

    以上内容是基于"JAVA 字符串应用笔记"可能涵盖的基本知识点,对于初学者来说,理解和掌握这些概念是进阶学习Java和Android开发的基础。在实际开发中,还会涉及到更多高级特性和实践技巧,如字符串格式化、正则表达式...

    java语言程序设计 基础篇+进阶篇课后习题

    以及处理字符串和数组的方法,如字符串连接、查找、替换以及数组遍历等。 进阶篇则会深入到更复杂的话题,比如异常处理、多线程、集合框架、IO流、网络编程、反射机制、枚举和注解等。在这些习题中,你可能需要实现...

    javasrcipt去字符串空格

    本文详细介绍了在JavaScript中去除字符串空格的方法,包括基本的`replace`方法以及一些进阶技巧,如去除首尾空格和合并多个连续空格等。通过这些技巧的应用,可以更加高效地处理字符串数据,提升代码的质量和可读性...

    老生常谈Java字符串进阶(必看篇)

    Java字符串是编程中常见且重要的数据类型,尤其在Java中,字符串处理的效率和灵活性直接影响程序性能。本文将深入探讨Java中的三个主要字符串类:String、StringBuilder和StringBuffer,以及它们各自的特点和常用...

    Android 对 strings.xml 的字符串进行格式化

    这里`getString(R.string.my_text)`获取到了`strings.xml`中定义的字符串资源,然后使用`String.format()`方法对其中的占位符进行了替换,最终得到格式化的字符串。 ### 三、进阶技巧与注意事项 #### 3.1 多个占位...

    Java进阶教程之String类

    在Java编程中,String类是至关重要的,因为它处理的是字符串数据,这是日常编程中最常见的数据类型之一。在Java进阶教程中,深入理解String类的特性和操作至关重要。 首先,String类的对象是不可变的,这意味着一旦...

    java语言程序设计基础进阶篇代码

    - **字符串**:使用String类,进行字符串的拼接、查找、替换等操作。 - **异常处理**:学习try-catch-finally结构,理解异常处理的重要性。 2. **进阶篇知识点**: - **面向对象**:深入理解类、对象、封装、...

    android字符串格式化

    在Java代码中,可以通过调用`String.format()`方法来格式化字符串。该方法的基本语法如下: ```java public static String format(String format, Object... args) ``` 其中`format`参数指定了字符串模板,而`args...

    JAVA正则表达式 从入门到进阶

    例如,"t.n"将匹配以"t"开头,以"n"结尾,中间任何字符的字符串。 2. **方括号符号**([]):方括号定义了一个字符集合,只匹配集合内的单个字符。如"t[aeio]n"仅匹配"tan", "ten", "tin"或"ton"。 3. **“或”...

    javaString总结共13页.pdf.zip

    这些知识点涵盖了Java字符串的基础和进阶用法。对于Java程序员来说,理解和熟练掌握这些特性是至关重要的,无论是在日常开发还是面试中,都是必不可少的知识点。在实际编程中,合理运用这些特性可以显著提高代码的...

    java小练习及答案

    练习可能涉及到字符串的拼接、查找、替换等操作。 6. **异常处理**:Java通过异常处理机制来处理程序运行时可能出现的问题。try-catch-finally结构是处理异常的关键,练习可能会要求编写处理各种异常的代码。 7. *...

    Python超详细入门到精通自学视频课程-3-字符串输出.ev4.rar

    7. **字符串查找与替换**:`find()`方法用于查找子字符串在主字符串中的位置,`replace()`方法用于替换特定子串。例如,`s.find("Python")`和`s.replace("Python", "Java")`。 8. **字符串分隔**:`split()`方法...

    Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt

    面向对象编程是Java编程的核心,本教程的"Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶"深入讲解了这一关键概念。...这些基础知识点是Java程序员必备的技能,对后续的Java进阶学习至关重要。

    java学习笔记

    - **字符串替换**:`replaceAll(String regex, String replacement)`和`replaceFirst(String regex, String replacement)`用于字符串替换。 - **字符串拆分**:`split(String regex)`用于按照指定的正则表达式拆分...

    java基础教程(pdf)

    在Java中,字符串是不可变的对象,这章将教你如何创建、比较和操作字符串,包括字符串连接、查找、替换和分割等方法。 最后,第7章“类”是Java面向对象编程的核心。你将了解到类的定义、对象的创建、封装、继承和...

    JAVA面试题及答案参考,JAVA面试前刷刷题

    将这个字符串中的连续子串用同等长度的仅包含 WASD 的字符串替换 Q,如果替换后整个字符串中 WASD 四个字母出现的频数相同,那么我们称替换后的字符串是“完美走位”。求子串的最小长度。如果输入字符串已经平衡则...

    尚硅谷_宋红康_第9章节练习_Java常用类.doc

    在Java中,字符串对象的比较应优先使用`.equals()`。 6. **数组与方法** - 字符串数组声明:正确声明字符串数组的方式是`String str[]`。 - 数组初始化:未初始化的数组元素默认为`null`,访问未赋值的数组元素会...

    Java基础学习08.pdf

    此外,Java中的字符串常量池是一个特殊的数据结构,用于存储字符串常量。当创建一个字符串常量时,如果常量池中已经存在相同的字符串,那么将直接引用池中的对象,避免重复创建,从而节省内存。例如,`String s1 = ...

    Java常见小实验代码合集

    4. **身份证日期加密**:此实验展示了字符串操作,特别是字符串替换。接收用户输入的身份证号,然后在第6位到第10位之间插入四个星号("****"),以隐藏出生日期,保护个人隐私。 这些实验代码对于初学者来说非常有...

    正则表达式经典实例

    6. **字符串替换** - **replace()**: 将字符串中所有符合正则表达式的子串替换为指定的字符串。 - **全局替换**: 使用全局标志(如Java和C#中的`g`)替换所有匹配项,而不仅仅是第一个。 7. **实践与案例** - ...

Global site tag (gtag.js) - Google Analytics