Java中String,StringBuffer,StringTokenizer类

原文地址:http://blog.csdn.net/lj70024/article/details/5455776


String类:
 java.lang.String类,不属于8种基本数据类型,String是一个对象,表示字符串常量。
 因为对象的默认值是null,所以String的默认值也是null,但它又是一种特殊的对象,有其他对象没有的特性。
 new String()和new String("")都是声明一个新的空字符串,是空串不是null。区别:空串是经过new运算符分配了内存,即实际存在了(定义了)。而null则没有(只声明),调用null的字符串的方法会抛出空指针异常。
 
 从根本上认识java.lang.String类和String池。
  1、String类是final的,不可被继承。public final class String。
  2、String类的本质是字符数组char[],并且其值不可改变。private final char value[];
  3、String类对象有个特殊的创建方式,如String x="abc"; "abc"就表示一个字符串对象,而x是"abc"对象的地址,叫做"abc"引用。
  4、Java运行时会维护一个String pool(String池),String池中的字符串内容不可重复,而一般对象(非String类)不存在这个缓冲池,并且创建的对象仅仅用于方法的堆栈区。
  5、创建字符串的方式归纳起来有三种:
   <1>、使用new关键字创建字符串,String s = new String("abc");
   <2>、直接指定,String s = "abc";
   <3>、使用串联生成新的字符串,String s = "ab" + "c";
 
 String对象的创建:
  1、当使用任何方式来创建一个字符串对象s时,JVM会拿这个s在String池中找是否存在内容相同的字符串对象。如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
  2、Java中,只要使用new关键字类创建对象,则一定会(在堆区或栈区)创建一个新对象。
  3、使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则直接返回已有的字符串对象地址(引用)。绝不会在堆栈去再创建该String对象。
  4、使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。
 
 String的不可变性:
  不可变字符串具有一个很大的有点:编译器可以把字符串设置为共享。
  String类型是不可改变的,比如当你想改变一个String对象时,如:
   String s = "abc";
   s = "fuck";
  JVM不会改变原来的对象("abc"),而是生成一个新的String对象("fuck",当然先检查String池中是否已经有"fuck"字符串对象,有则引用,无则新建),然后让s去指向它,如果原来那个"abc"没有任何对象引用它,虚拟机的垃圾回收机制会接收它。这样可以提高运行效率!
 注意:Java中字符串内容的比较用的是专门的方法如equals,compareTo等。==比较的是字符串的引用是否相同。
 

 StringBuffer类:
  字符串变量。可修改的字符串序列,该类的对象实体内存空间可以自动改变大小,便于存放一个可变的字符序列。
 StringBuffer类有3个构造方法:
  StringBuffer()
  StringBuffer(int size)
  StirngBuffer(String s)
 当使用第1个无参数的构造方法时,分配给该对象的实体初始容量可以容纳16个字符,当该扩展字符序列长度>16时,实体容量自动增加以适应新字符串。
 当使用第2个构造方法,可以指定分配给该对象的实体的初始容量为参数size指定的字符个数。当对象实体长度>size时自动增加。
 当使用第3个构造方法,分配给该对象的实体的初始容量为参数字符串s的长度+16个字符,当对象实体长度大于初始容量时,实体容量自动增加。
 
 StringBuffer对象可以通过length()放发获取实体存放的字符序列长度。通过capacity()方法获取当前实体的实际容量。
 

 StringTokenizer类:
  使用java.util.StringTokenizer类,分析一个字符串并分解成可独立使用的单词。
 StringTokenizer类有两个常用构造方法:
  StringTokenizer(String s):为字符串s构造一个分析器。使用默认的分隔符集合,即空格符(若干个空格符被看做一个空格)、换行符、回车符、Tab符、进纸符(/f)。
  StringTokenizer(String s, String dilim):为字符串s构造一个分析器。参数dilim中的字符被作为分隔符。

 把StringTokenizer对象称作一个字符串分析器。一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号(单词),每当调用nextToken()时,都将在字符串中获得下一个语言符号,每获得一个语言符号,字符串分析器中负责计数的变量值自动减1,该计数变量的初始值等于字符串中的单词数目(可以用StringTokenizer对象调用countTokens()方法获得计数值)。
 如:
  String str="we are stud,ents";
  StringTokenizer fenxi = new StringTokenizer(str,", "); //使用空格和逗号做分隔符
  int count=fenxi.countTokens();
  while(fenxi.hasMoreElements())
  {
       String s = fenxi.nextToken();
       System.out.println(s);
  }
  System.out.println("共有单词:"+count+"个。");
 
 另外,StringTokenizer可以用String类的split函数代替
  String str="abc;bcd;efg";
  String[] splitStrs=str.split(";"); 
  for(int i=0;i<splitStrs.length;i++)
       System.out.println(splitStrs[i]);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值