最近在开发的过程中用到了字符串的替换, 本来觉得挺简单的问题,却总也解决不了。字符串明明是替换了,却总也输出不了正确结果,很是郁闷,到底是为什么呢?
先来看我的代码:
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和Android开发的基础。在实际开发中,还会涉及到更多高级特性和实践技巧,如字符串格式化、正则表达式...
以及处理字符串和数组的方法,如字符串连接、查找、替换以及数组遍历等。 进阶篇则会深入到更复杂的话题,比如异常处理、多线程、集合框架、IO流、网络编程、反射机制、枚举和注解等。在这些习题中,你可能需要实现...
本文详细介绍了在JavaScript中去除字符串空格的方法,包括基本的`replace`方法以及一些进阶技巧,如去除首尾空格和合并多个连续空格等。通过这些技巧的应用,可以更加高效地处理字符串数据,提升代码的质量和可读性...
Java字符串是编程中常见且重要的数据类型,尤其在Java中,字符串处理的效率和灵活性直接影响程序性能。本文将深入探讨Java中的三个主要字符串类:String、StringBuilder和StringBuffer,以及它们各自的特点和常用...
这里`getString(R.string.my_text)`获取到了`strings.xml`中定义的字符串资源,然后使用`String.format()`方法对其中的占位符进行了替换,最终得到格式化的字符串。 ### 三、进阶技巧与注意事项 #### 3.1 多个占位...
在Java编程中,String类是至关重要的,因为它处理的是字符串数据,这是日常编程中最常见的数据类型之一。在Java进阶教程中,深入理解String类的特性和操作至关重要。 首先,String类的对象是不可变的,这意味着一旦...
- **字符串**:使用String类,进行字符串的拼接、查找、替换等操作。 - **异常处理**:学习try-catch-finally结构,理解异常处理的重要性。 2. **进阶篇知识点**: - **面向对象**:深入理解类、对象、封装、...
在Java代码中,可以通过调用`String.format()`方法来格式化字符串。该方法的基本语法如下: ```java public static String format(String format, Object... args) ``` 其中`format`参数指定了字符串模板,而`args...
例如,"t.n"将匹配以"t"开头,以"n"结尾,中间任何字符的字符串。 2. **方括号符号**([]):方括号定义了一个字符集合,只匹配集合内的单个字符。如"t[aeio]n"仅匹配"tan", "ten", "tin"或"ton"。 3. **“或”...
这些知识点涵盖了Java字符串的基础和进阶用法。对于Java程序员来说,理解和熟练掌握这些特性是至关重要的,无论是在日常开发还是面试中,都是必不可少的知识点。在实际编程中,合理运用这些特性可以显著提高代码的...
练习可能涉及到字符串的拼接、查找、替换等操作。 6. **异常处理**:Java通过异常处理机制来处理程序运行时可能出现的问题。try-catch-finally结构是处理异常的关键,练习可能会要求编写处理各种异常的代码。 7. *...
7. **字符串查找与替换**:`find()`方法用于查找子字符串在主字符串中的位置,`replace()`方法用于替换特定子串。例如,`s.find("Python")`和`s.replace("Python", "Java")`。 8. **字符串分隔**:`split()`方法...
面向对象编程是Java编程的核心,本教程的"Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶"深入讲解了这一关键概念。...这些基础知识点是Java程序员必备的技能,对后续的Java进阶学习至关重要。
- **字符串替换**:`replaceAll(String regex, String replacement)`和`replaceFirst(String regex, String replacement)`用于字符串替换。 - **字符串拆分**:`split(String regex)`用于按照指定的正则表达式拆分...
在Java中,字符串是不可变的对象,这章将教你如何创建、比较和操作字符串,包括字符串连接、查找、替换和分割等方法。 最后,第7章“类”是Java面向对象编程的核心。你将了解到类的定义、对象的创建、封装、继承和...
将这个字符串中的连续子串用同等长度的仅包含 WASD 的字符串替换 Q,如果替换后整个字符串中 WASD 四个字母出现的频数相同,那么我们称替换后的字符串是“完美走位”。求子串的最小长度。如果输入字符串已经平衡则...
在Java中,字符串对象的比较应优先使用`.equals()`。 6. **数组与方法** - 字符串数组声明:正确声明字符串数组的方式是`String str[]`。 - 数组初始化:未初始化的数组元素默认为`null`,访问未赋值的数组元素会...
此外,Java中的字符串常量池是一个特殊的数据结构,用于存储字符串常量。当创建一个字符串常量时,如果常量池中已经存在相同的字符串,那么将直接引用池中的对象,避免重复创建,从而节省内存。例如,`String s1 = ...
4. **身份证日期加密**:此实验展示了字符串操作,特别是字符串替换。接收用户输入的身份证号,然后在第6位到第10位之间插入四个星号("****"),以隐藏出生日期,保护个人隐私。 这些实验代码对于初学者来说非常有...
6. **字符串替换** - **replace()**: 将字符串中所有符合正则表达式的子串替换为指定的字符串。 - **全局替换**: 使用全局标志(如Java和C#中的`g`)替换所有匹配项,而不仅仅是第一个。 7. **实践与案例** - ...