注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

liangxh2008的博客

 
 
 

日志

 
 

[转载]java字符串之StringBuffer的应用  

2010-05-28 10:22:22|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

String是不变类,用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大.因此java提供了一个StringBuffer类,这个类在修改字符串方面的效率比String高了很多。

 

在java中有3个类来负责字符的操作。

  1.Character 是进行单个字符操作的,

  2.String 对一串字符进行操作。不可变类。

  3.StringBuffer 也是对一串字符进行操作,但是可变类。

 

String:
是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.

String 是final类,即不能被继承.

 

StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");

字符串连接操作中StringBuffer的效率要比String高:

String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.

并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的. 
    
一、关键技术点
     1、StringBuffer的indexOf、lastIndexOf、substring、charAt方法的用途和String类一样。
     2、append实例方法往字符串尾部添加字符或者字符串。
     3、insert实例方法往字符串中间插入字符或字符串。
     4、delete和deleteCharAt方法删除字符串中的子串或者字符。
     5、replace方法用于替换子串。
     6、reverse方法将字符串倒序。
    
二、实例演示

/** *//**
* 文件名:UsingStringBuffer.java
*/
package book.oo.String;

/** *//**
* 使用StringBuffer类操作字符串
* @author joe
*
*/
public class UsingStringBuffer ...{
    
     /** *//**
      * 查找匹配字符串
      */
     public static void testFindStr() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //返回子字符串在字符串中最先出现的位置,如果不存在,返回负数
         System.out.println("sb.indexOf(\"is\") = " + sb.indexOf("is"));
         //给indexOf方法设置参数,指定匹配的起始位置
         System.out.println("sb.indexOf(\"is\", 4) = " + sb.indexOf("is", 4));
         //返回子字符串在字符串中最后出现的位置,如果不存在,返回负数
         System.out.println("sb.lastIndexOf(\"is\") = " + sb.lastIndexOf("is"));
         //给lastIndexOf方法设置参数,指定匹配的结束位置
         System.out.println("sb.lastIndexOf("\is\", 1) = " + sb.lastIndexOf("is", 1));
     }
    
     /** *//**
      * 截取字符串
      */
     public static void testSubStr() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //substring方法截取字符串,可以指定截取的起始位置和终止位置
         //默认的终止位置为字符串的末尾
         System.out.println("sb.substring(2) = " + sb.substring(2));
         System.out.println("sb.substring(2, 9) = " + sb.substring(2, 9));
     }
    
     /** *//**
      * 获取字符串中某个位置上的字符
      */
     public static void testCharAt() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //返回字符串中某个位置上的字符
         System.out.println("sb.charAt(2) = " + sb.charAt(2));
     }
    
     /** *//**
      * 添加各种类型的数据到字符串尾部
      */
     public static void testAppend() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //添加字符或者字符数组到StringBuffer的末尾
         sb.append(’I’);
         sb.append(new char[]...{’ ’, ’a’, ’m’});
         System.out.println("Append char:" + sb.toString());
         //添加字符串到StringBuffer的末尾
         sb.append(" in 、Beijing.");
         System.out.println("Append String: " + sb.toString());
         //添加基本数字
         sb.append(15);
         sb.append(1.23f);
         sb.append(3.4d);
         sb.append(899L);
         System.out.println("Append number: " + sb.toString());
         //添加布尔值
         sb.append(false);
         sb.append(true);
         System.out.println("Append boolean: " + sb.toString());
     }
    
     /** *//**
      * 删除字符串中的数据
      */
     public static void testDelete() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //删除指定位置的字符
         sb.deleteCharAt(1);
         sb.deleteCharAt(2);
         System.out.println("Delete char: " + sb.toString());
         //删除指定范围的字符串
         sb.delete(1, 5);
         System.out.println("sb.delete(1, 5) = " + sb.toString());
     }
    
     /** *//**
      * 向字符串中插入各种类型的数据
      */
     public static void testInsert() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //能够在指定位置插入字符、字符数组、字符串以及各种数字和布尔值
         sb.insert(2, ’W’);
         sb.insert(3, new char[]...{’A’, ’B’, ’C’});
         sb.insert(8, "abc");
         sb.insert(2, 3);
         sb.insert(3, 2.3f);
         sb.insert(6, 3.75d);
         sb.insert(5, 9843L);
         sb.insert(2, true);
         System.out.println("testInsert: " + sb.toString());
     }
    
     /** *//**
      * 替换字符串中的某些字符
      */
     public static void testReplace() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         //将字符串中某段字符替换成另一个字符串
         sb.replace(3, 8, "replace");
         System.out.println("testReplace: " + sb.toString());
     }
    
     /** *//**
      * 将字符串倒序
      */
     public static void reverseStr() ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         System.out.println(sb.reverse());     //reverse方法将字符串倒序
     }
    
     public static void main(String[] args) ...{
         StringBuffer sb = new StringBuffer("This is a StringBuffer!");
         System.out.println("原始StringBuffer: " + sb.toString());
        
         UsingStringBuffer.testFindStr();
         UsingStringBuffer.testSubStr();
         UsingStringBuffer.testCharAt();
         UsingStringBuffer.testAppend();
         UsingStringBuffer.testDelete();
         UsingStringBuffer.testInsert();
         UsingStringBuffer.testReplace();
         UsingStringBuffer.reverseStr();
     }

}
输出结果:

原始StringBuffer: This is a StringBuffer!
sb.indexOf("is") = 2
sb.indexOf("is", 4) = 5
sb.lastIndexOf("is") = 5
sb.lastIndexOf("is", 1) = -1
sb.substring(2) = is is a StringBuffer!
sb.substring(2, 9) = is is a
sb.charAt(2) = i
Append char:This is a StringBuffer!I am
Append String: This is a StringBuffer!I am in 、Beijing.
Append number: This is a StringBuffer!I am in 、Beijing.151.233.4899
Append boolean: This is a StringBuffer!I am in 、Beijing.151.233.4899falsetrue
Delete char: Ti is a StringBuffer!
sb.delete(1, 5) = T a StringBuffer!
testInsert: Thtrue32.984333.75WABCisabc is a StringBuffer!
testReplace: Thireplacea StringBuffer!
!reffuBgnirtS a si sihT
小结:
StringBuffer不是不变类,在修改字符串内容时,不会创建新的对象,因此,它比String类更适合修改字符串。
StringBuffer类没有提供同String一样的toCharArray方法
StringBuffer类的replace方法同String类的replace方法不同,它的replace方法有三个参数,第一个参数指定被替换子串的起始位置,第二个参数指定被替换子串的终止位置,第三个参数指定新子串

  评论这张
 
阅读(921)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017