黑马程序员技术交流社区

标题: 知道String类的replace和StringBuffer类的replace区别吗。。 [打印本页]

作者: 谢毅    时间: 2013-1-23 00:22
标题: 知道String类的replace和StringBuffer类的replace区别吗。。
本帖最后由 谢毅 于 2013-1-23 15:23 编辑

            StringBuffer是一个容器,里面是按索引值存放字符的,我们都知道字符都在字符常量区,不能修改,能改变的只能是指向他们的内存地址值,所以Buffer就是按索引值去替换掉内存地址值。
  1. public class Str1 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 StringBuffer s1=new StringBuffer("abcdefghik");
  8.                
  9.                 System.out.println(s1.hashCode());
  10.                 s1=s1.replace(1,4, "ada");
  11.                 System.out.println(s1);
  12.                 System.out.println(s1.hashCode());
  13.                
  14.                 System.out.println("---------------------");
  15.                 String s2="abcdefghik";
  16.                 //System.out.println(s1.contains("sad"));
  17.                 System.out.println(s2.hashCode());
  18.                 s2=s2.replace("cd", "ada");
  19.                 System.out.println(s2);
  20.                 System.out.println(s2.hashCode());
  21.         }

  22. }
复制代码
结果为:
  1. 7971559
  2. aadaefghik
  3. 7971559
  4. ---------------------
  5. -634317658
  6. abadaefghik
  7. 1846299905
复制代码

作者: ︶ㄣ布丁    时间: 2013-1-23 03:34
String类是java中使用频率最高的类之一,常用replace的方法但是以前总是对这两个方法理解上有些曲解。现在更正之~
1.误区之一:replace只匹配第一个相同字符并替换之,而replaceAll是查找所有的。
更正:replace和replaceAll都是查找出所有匹配字符并替换之,最大的不同:replaceAll的参数是正则表达式,而replace是普通字符。
String path = "D:\\downloads\\test\\renmian";
将路径中的'\'替换为'\\'
String result1 = path.replace("\\", "\\\\");
String result2 = path.replaceAll("\\\\", "\\\\\\\\");
result1与result2的输出结果是一致的~
replace是匹配字符,替换字符;而replaceAll是查找正则表达式,用正则表达式来替换。

2.用replaceAll查找需要的字符串
String testStr = "
作者: 黄锦成    时间: 2013-1-23 10:01
String的replace返回的是一个新的字符串对象
StringBuffer的replace返回的是还是原来的StringBuffer对象,只不过内容变了

                      String str = "afadfadfafgadf";
               
                String str1 = str.replace('a', 'd');
               
                System.out.println(str==str1);
               
                StringBuffer sb = new StringBuffer("fadfadfa");
                StringBuffer sb1 = sb.replace(1, 2, "v");
                System.out.println(sb==sb1);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2