程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java學習 (十八)、String、StringBuffer和StringBuilder,定義一個自己的StringBuilder的類,bufferbuilder

Java學習 (十八)、String、StringBuffer和StringBuilder,定義一個自己的StringBuilder的類,bufferbuilder

編輯:JAVA綜合教程

Java學習 (十八)、String、StringBuffer和StringBuilder,定義一個自己的StringBuilder的類,bufferbuilder


String

Java中的字符串值屬於String類,雖然有其它方法表示字符串(如字符數組),但Java一般使用String類作為字符串的標准格式,Java編譯器把字符串值作為String對象;

String對象一旦創建就不能改變。如果需要進行大量的字符串修改操作,應該使用StringBuilder/StringBuffer類或者字符串數組,最終結果可以被轉換成String對象;

 

StringBuffer:線程安全的可變字符序列;

一個類似於String的字符串緩沖區,通過某些方法調用可以改變該序列的長度和內容;

每個字符串緩沖區都有一定的容量。只要字符串緩沖區所包含的字符序列的長度沒有超出此容量,就無需分配新的內部緩沖區數組;

如果內存緩沖區溢出,則此容量自動增大;

 

StringBuilder:從JDK1.5開始,為StringBuffer類補充了一個單個線程使用的等價類,即StringBuffer;

與StringBuffer相比,通常應該優先使用StringBuilder類,因為它支持所有相同的操作,但由於它不執行同步,所有速度更快;

常用方法:

public int length()

public int capacity()

public StringBuffer append(String str)

public StringBuffer insert(int offset,String str)

public int indexOf(String str)

public int indexOf(String str,int fromIndex)

public int lastIndexOf(String str)

public StringBuffer reverse()

public String toString()

1 public class StringBuilderDemo{ 2 public static void main(String []args){ 3 //StringBuilder sb="abc";//無此聲明方式 4 //StringBuilder sb=new StringBuilder();//默認16個字符大小的容量 5 //StringBuilder sb=new StringBuilder(100);//初始化容量大小的動態字符串 6 //StringBuilder sb=new StringBuilder("abc"); 7 8 StringBuilder sb=new StringBuilder(); 9 sb.append("hello"); 10 sb.append(1); 11 sb.append(1.5); 12 sb.append(true); 13 System.out.println(sb.length()); 14 System.out.println(sb.capacity()); 15 16 sb.insert(5,"world"); 17 System.out.println(sb.toString()); 18 sb.replace(5,7,"el"); 19 System.out.println(sb.toString()); 20 System.out.println(sb.indexOf("el")); 21 System.out.println(sb.reverse()); 22 } 23 } View Code

 

自定義一個自己的StringBuilder的類

案例介紹:自定義一個MyStringBuilder類來實現StringBuilder的功能;

案例設計:實現append方法追加字符串的功能;實現length方法統計字符的個數;實現capacity()方法獲取容器大小;實現toString()方法,完成字符串的輸出;

 1 import java.util.Arrays;
 2 public class MyStringBuilderDemo{
 3     public static void main(String []args){
 4         MyStringBuilder msb=new MyStringBuilder();
 5         msb.append("hello").append("java").append("12345678");
 6         System.out.println("字符個數:"+msb.length());
 7         System.out.println("總容量大小:"+msb.capacity());
 8         System.out.println("輸出字符串:"+msb.toString());
 9     } 
10 }
11 
12 class MyStringBuilder{
13     private char[] value;//字符數組
14     private int count=0;//字符數組中存放字符的個數
15     public MyStringBuilder(){
16         value=new char[16];
17     }
18     public MyStringBuilder(int capacity){
19         value=new char[capacity];
20     }
21     public MyStringBuilder(String str){
22         value=new char[str.length()+16];
23     }
24     //得到字符數組中存放的字符個數
25     public int length(){
26         return count;
27     }
28     //返回容器的容量大小
29     public int capacity(){
30         return value.length;
31     }
32     //實現字符串的添加(追加)
33     public MyStringBuilder append(String str){
34         int len=str.length();//獲取要添加的字符串的長度
35         //確保字符數組能放進去所添加的字符串
36         ensureCapacity(count+len);
37         //把要添加的字符串追加到新的指定數組的指定位置後
38         str.getChars(0,len,value,count);
39         count+=len;//元素的個數增加了len
40         return this;
41     }
42     
43     private void ensureCapacity(int capacity){
44         //數據超出容量大小
45         if(capacity-value.length>0){
46             int newCapacity=value.length*2+2;//擴容後的新字符數組大小
47             value=Arrays.copyOf(value,newCapacity);
48         }
49     }
50     //把字符數組的字符轉換成字符串格式
51     public String toString(){
52         return new String(value,0,count);
53     }
54 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved