string、stringbuffer與stringbulder區別


 

1、  字符串是一個特殊的對象,它一旦被初始化,就不可以被改變,不能有子類,所以String中的方法都不能被復寫;

2、  字符串有兩種賦值方式

1)  String s1 = “abc”;  ——在內存中只有一個對對象。

2)  String s2 = new String(“abc”);——在內存中有兩個對象,”abc”是一個對象,new又創建了一個對象。

3、  equals方法

Object中的equals方法是用於比較兩個對象的地址的,String類中重寫了該方法,使得其比較的是具體的對象的值。

 

 

第二講字符串常用功能

1、  字符串在內存中的特性

               

2、  操作字符串的方法

2.1 讀取方法

l  int length()——獲取字符串長度;

l  char charAt(int index)——根據位置獲取位置上某個字符;

l  int indexOf(int ch)——返回ch在字符串中第一次出現的位置;

l  int indexOf(int ch,int fromIndex)——從fromIndex指定位置開始,獲取ch在字符串中第一次出現的位置;

l  int indexOf(String str)——返回str在字符串中第一次出現的位置;

l  int indexOf(String str,int fromIndex)——從fromIndex指定位置開始查找,返回str在字符竄中第一次出現的位置;

l  int lastIndexOf(int ch)——返回ch自字符串中最后一次出現的位置

2.2   判斷操作

l  boolean contains(str)——判斷字符串中是否包含str;

l  boolean isEmpty();——判斷字符串中是否有內容。其原理是判斷字符串長度是否為0;

l  Boolean startsWith(str)——判斷字符串是否以str開頭。

l  Boolean endsWith(str)——判斷字符串是否以str結尾。

l  Boolean equals(str)——判斷字符串內容是否相同。Object類中的equals方法。

l  Boolean equalsIgnoreCase(str)——判斷內容是否相同,並且忽略了大小寫。

2.3   字符串與其他數據類型互相轉換

l  將字符串轉成字符串:

方法一:構造函數方法

String(char[] ch )

String(char[] ch,int offset,int count)——將字符串數組中的一部分轉成字符串。

                             方法二:靜態方法

                                               Static String copyValueOf(char[] ch)

                                               Static String copyValueOf(char[] , int offset, int count)

l  將字符串轉成字符數組

Char[]  toCharArray();

l  將字節數組轉成字符串——構造函數方法實現

String(byte[] b);

String(byte[] b,int offset , int count)

l  將字符串轉成字節數組

Byte[]  getBytes();

特殊情況:字符串和字節數據在轉換過程中,可以指定編碼表。

l  將基本數據類型轉成字符串

Static String valueOf(int i)——將int類型數據轉成字符串

Static String valueOf(double d)——將double型數據轉成字符串

 

2.4   替換字符串中的某個字符

String replace(oldchar , newchar).

2.5   根據指定字符將字符串切割成多個字符串

String[] split(regex);

2.6   獲取字符串中的一部分

String substring(begin)——獲取字符串中從begin以后的所有字符。

String substring(begin , end)——獲取字符串中從begin(包含)開始到end(不包含)之間的字符。

2.7   大小寫轉換,去除空格,字符串自然順序比較

l  大小寫轉換

String toUpperCase()——將字符串轉成大寫;

String toLowerCase()——將字符串轉成小寫;

l  將字符串兩端的多個空格去除

    String trim();

l  對兩個字符串進行自然順序比較

    Int compareTo(String);——字符串重寫了Comparable接口中的compareTo方法。

練習:

1、  模擬一個trim方法,去除字符串兩端的空格

思路:

1)判斷字符串的第一個位置是否為空,如果是繼續向下判斷,直到不是空格為止;結尾處的空格判斷也是如此。

2)當開始和結尾都判斷到不是空格了,將前后兩處之間的字符取出來,達到去除字符串兩端空格的目的。

代碼實現如下: 

2、  將一個字符串進行翻轉。將字符串中指定部分進行翻轉

3、  獲取一個字符串在另一個祖父串中出現的次數

4、  獲取兩個字符串中最大相同字符串。

第三講 StringBuffer

1、  概述

StringBuffer是一個容器,我們可以對容器中的數據進行增、刪、改、查。當數據類型和數據個數不確定時,而且最終要變成字符串的時候,就可以用字符串緩沖區。

2、  特點

1)  長度可以變化;

2)  可以直接操作多個數據類型;

3)  最終會通過toString方法變成字符串;

3、  功能

1)  存儲

StringBuffer append()——將指定數據作為參數添加到已有數據結尾處

StringBuffer insert(index,數據)——將數據插入到指定的位置(index);

2)  刪除

StringBuffer delete(int start,int end)——刪除緩沖區中的數據,包含start,不包含end;

StringBuffer deleteCharAt(index)——刪除指定位置的字符

3)  獲取

Char charAt(int index);——返回指定位置處的字符

Int indexOf(String str)——查找字符串str在容器中第一次出現的位置

Int lastIndexOf(String str)——查找字符串str在容器中最后一次出現的位置

Int length()——獲取容器的長度

String substring(int start, int end)——獲取緩沖區中從start(包含)到end(不包含)的數據。

4)  修改

StringBuffer repace(start,end,String)——利用string替換容器中從start(包含)到end(不包含)的數據。

Void setCharAt(int index, char ch)——將緩沖區中index位置處的數據替換成ch。

5)  反轉

StringBuffer reverse();

 

 

4、  StringBulder與StringBuffer

StringBulder是jdk1.5版本之后才出現的,為了提高單線程運行效率。它與StringBuffer的區別如下:

1)  StringBuffer是線程同步的,即,多線程調用時,對緩沖區中數據的操作代碼是同步的;而StringBulder是不同步的。

2)  StringBulder不需要判斷鎖(因為不同步),提高了運行效率,在單線程下建議使用StringBulder,多線程下建議使用StringBuffer。

總結

1、String和StringBuffer區別

1)String和StringBuffer都有對字符串進行增刪改查等操作;

2)String長度和內容都不可變,StringBuffer長度和內容都可變;

3)StringBuffer有反轉功能;

2、StringBuffer和StringBuilder的主要區別

         1)StringBuffer線程同步,StringBuilder線程不同步;

         2)StringBuffer效率較低,StringBuilder效率較高;

         3)多線程時使用StringBuffer,單線程時使用StringBuilder;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM