String&stringBuffer&包裝類


 

一、String類的特點:

很多中語言都有對字符串的描述,以及功能的提供

 

String s= new String()的值就是空參數,即就是s=“”裏面沒有值;

String s=”abc”  s是一個類類型對象,即“abc”就是一個對象;

只要是引號裏面的值都是類對象;

字符串的最大特點是,他是一個常量,一旦被初始化,就不可以被改變;;

即這個對象的內容一旦被初始化,就不會被改變,

但是注意,他的聲明被改變指向,不表示對象的值變了,只是變量的指向不同了;

聲明並不等於變量本身,只是一種指向而已;

String字符串是常量池的一部分;

String s2 = new String(“abc”) 這和上面的一種定義取值是一樣的;

String s1 = “abc”

 

String類判斷值相等只能用equals方法,因爲他重寫了Object類中的這個方法,定義了獨特的內容。即用來判斷這個String類中的字符串內容是否相同;不能用“==”。“==”表示地址值是否相同;

 

s1s2有什麼區別:

s1在內存中有一個對象;s2在內存共有兩個對象;

 

常量池其實就是一個數組,需要什麼數值,他就把裏面的值取出來放在這個數組裏面;就是這麼一個過程,有相同的需要直接指向就行了,不需要再放,沒有就再放;

 

說明一下常量池是指這個內存裏的值都是固定不變的,不會變化,可以包含任何的類型,這是常量的定義,

 

 

二、String類中的方法;

 

String s1 = “abc”;String  s2 = “abc”;在這裏s1==s2是真,因爲他們都是常量池的內容,並且常量池的特點是都是finally的,所以不會創建新的對象,直接指向其就可以了,那麼就相等了。

 

方法區數據裏有,類方法,靜態去,常量池,

常量池的數據是固定不變的,字符串就是在常量池當中;

 

String類是用於描述字符串事物,String類事物的特點肯定很自由他自己知道,他把他們都封裝起來,那麼他就對外提供了多個訪問方法對字符串進行操作;

 

常見的操作方法有哪些呢?

1、獲取

         1.1字符串中的包含的字符數,也就是字符串的長度;

                   intlength():獲取長度;

                   數組也有長度,但是他是屬性,沒有括號,字符串的長度是方法有括號。

 

         1.2根據位置獲取位置上的某個字符;

                   charcharAt(int index):

         1.3根據字符獲取該字符在字符串中的位置

                   intindexOf(int ch):返回的是ch在字符串中第一次出現的位置;

                   intindexOf(int ch,int fromIndex):從fromIndex指定位置開始,獲取ch在字符串   中的出現的位置;

                   如果訪問到的字符串中不存在的腳標時,會發生指針異常;

                   如果沒有找到要指引的字符,那麼就返回-1;

                   intindexOf(String str):返回的是str在字符串中第一次出現的位置;

                   intindexOf(String str,int fromIndex):從fromIndex指定位置開始,獲取str在字    符串中的出現的位置;

                   注意,位置和數組的位置差不多,是從零腳標位置一樣;

 

         反向索引:

                   lastIndexof();從最後一個數開始查找,提高查找效率;但是腳標不會發生改變;

        

 

                   1.5版本的新特性,基本數據類型的新特性,裝箱;即所有的對象都可以用Object類表示,基本數據類型也是;

 

2、判斷、

         2.1字符串中是否包含某一個子串;

                   booleancontains(str);判斷字符串是否存在,是否包含;

                   特殊之處:indexOf(str)可以索引str第一次出現的位置,如果返回-1,表示str不在字符串中存在,所以也可以用於指定判斷是否包含;

                   if(str。indexOf(“aa”)!=-1)

                   而且該方法即可以判斷,又可以獲取出現的位置;

         2.2字符串是否有內容;

                   booleanisEmpty();原理就是判斷長度是否爲0;注意“”和null是有區別的;

         2.3字符串是否是以指定內容開頭;

                   booleanstartsWith(str);

         2.4字符串是否是以指定內容結尾;

                   booleanendsWith(str);

        

                   以上四種可以用於查找文件夾中的某個文件類型或者名稱;

         2.5判斷字符串內容是否相同,是複寫了Object類中的equals方法;

                   booleanequals (str);

         2.6判斷內容是否相同,並忽略大小寫;

                   booleanequalsIsIgnoreCase();

3、轉換

         3.1將字符數組轉成字符串

                   構造函數 String (char[]);

                   構造函數 String(char[],offset,count)將字符數組中的一部分轉成字符串;

                   構造函數就要先new一個實例纔可以;

                   靜態方法

                                     staticString copyValueOf(char[] data)

                                     staticString copyValueOf(char[] data, int offset, int count)

                                     staticString valueOf(char[] data)

         3.2將字符串轉成字符數組;(重點)

                   char[]  toCharArray();沒有參數,因爲轉的對象就是字符串,裏面用的就是this,故省略

                  

         3.3將字節數組轉成字符串;

                   String(byte[]);

                   String(byte[],offset,count)將字節數組中的一部分轉成字符串;

 

         3.4將字符串轉成字節數組;

                   byte[]  getBytes();

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

                   staticString String valueOf(int)

                   staticString String valueOf(double)

                   //3+“”;//String.valueOf(3);兩種表達的結果是一樣的,這樣表達比較無聊;可以少用;

 

                   注意特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的;

         但凡要做編碼操作,要變成字節才行,字符是不行的;

 

4、替換

         字符間的替換String     replace(oldchar,newchar);

注意,替換之後,得到的結果是一個新的字符串,即重新創建了一個新的對象;不是覆蓋了原來的字符串;

如果要替換的字符不存在,那麼返回來的值還是原串;

         字符串的替換Stringreplace(CharSequence target, CharSequence replacement)

5、切割:

String[] split(regex); 可以把字符串分開的;

6、子串:獲取字符串中的一部分

String subString(begin);從指定位置開始到結尾;

String subString(begin,end);包含頭,不包含尾;

運用:s. subString(0,s.length())這種表達可以獲得整個字符串,因爲字符串最後一個腳標是length-1;

         如果給出的腳標不存在,那麼就會出現腳標越界異常;

7、轉換,去除空格,比較:

         7.1將字符串轉成大寫或者小寫;

                   StringtoUpperCase();轉大寫

                   StringtoLowerCare();轉小寫

         7.2將字符串兩段的多個空格去處;

                   Stringtrim();

                   可能會因爲用戶多敲了一個空格會被誤解帳號被盜了;

         7.3對兩個字符串進行自然順序的比較;

                   intcompareTo(String);

                   只比較第一個不同的字符進行排序;

 

三、字符串練習:

         字符串方法必須要會,會到不借助api,不借助eclipse的功能,能手寫出來,才能說明你有開發經驗;否則誰都不信;

 

 

開發中,功能儘量細化出來,變成一個小的函數,而且方便修改,填充內容(抽象的思維),以及調用,

 

 

四、StringBuffer

StringBuffer緩衝區,String的字符串一旦初始化不能被改變,StringBuffer可以對字符串進行修改,StringBuffer是一個容器;

StringBuffer是字符串緩衝區,是一個容器;容器具備的特點就是對數據的改變;

所以StringBuffer應該有以下功能:存儲,刪除,獲取,修改 

CURD  create  update  read delete;

 

注意final類不能夠進行繼承;

 

1、存儲

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

         這個方法返回來的還是本類對象,因此還可以繼續調用方法;

         sb.append().append().append()  可以把結果作爲對象繼續引用本類方法;

         存儲的一個方式或者添加的一種方式,因爲他訪問的對象是原緩衝區的對象;

         因爲緩衝區是一個容器,所以添加數據後,還是是這個容器對象,雖然裏面數據變化了;

因爲這個容器就可以直接作爲一個對象。裏面的數據無論怎麼變化,這個容器還是這個對象;

        

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

 

         緩衝區的特點就是可以不斷的往裏面添加數據,而最終用的時候都變成了一連串的字符串形式用;

        

         StringBuffer是字符串緩衝期,是一個容器,而且長度是可變化的;並且可以操作多個數據類型;最終可以通過toString方法變成字符串;

        

2、刪除

StringBuffer  delete (start,end):刪除緩衝區的數據,包含start,不包含end;

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

 

清空緩衝區的方法:sb.delete(0,sb.length());

 

 

3、獲取

char charAt(int index) 

int indexOf(String str)

int lastIndexOf(String str)

int length() 

String substring(int start, int end)

 

4、修改:把原來串中的數據改變一下;

StringBuffer replace(int start, int end,String str)  包含頭,不包含尾;

void setCharAt(int index, char ch)  把指定的位置替換爲某字符串;

 

5、反轉;StringBufferreverse() 

 

 

以上的方法要熟記;

 

6、void  getChars(int srcBegin, int srcEnd, char[]dst, int dstBegin)

將緩衝區中的指定數據存儲到指定的字符數組中;

 

五、StringBulider  在JDK1。5版本之後出現的;

StringBulider是線程不同步的;而StringBuffer是同步的;

StringBulider此類提供一個與 StringBuffer 兼容的,是可以替換的;多線程下StringBulider不同步,故不安全,而單線程StringBulider不需要判斷鎖,比StringBuffer性能更優;

當然,多線程,你也可以自己多線程用StringBulider,然後自己加一個鎖即可;

 

Java升級考慮三個方面,提高效率,簡化書寫,提高安全性;

 

建議以後開發就用Stringbuilder。這樣可以提高效率;

 

六、基本數據類型,對象包裝類;

 

一個類,他自己的特點和功能只有他自己最清楚,所以把他自己知道的各種功能都封裝起來;變成一個類;以後使用只需訪問之即可;

一切變成對象之後,指揮他就可以調用其所有工具了;

 

byte------Byte  

short------Short

int---------Integer

long-------Long

float-------Float

double----Double

char-------Character

 

 

 

 

基本數據類型對象包裝類的最常見的作用,就是用於基本數據類型和字符串類型之間做轉換,即基本數據類型轉成字符串;字符串轉成基本數據類型;

基本數據類型轉字符串,兩種方法;

基本數據類型+“”;

Integer.toString();

字符串轉成基本數據類型:

static int parseInt(String s)   

   double=parseDouble();

Integer.parseInt();

 

布爾型的轉換

static boolean parseBoolean(String s)

boolean b = Boolean.parseBoolean(“true”)

 

parseInt(String s, int radix)  把其他進制形式轉爲十進制的數字;

 

 

把字符串轉爲int型的數據

 

除了上面的靜態方法外,還可以用對象調用方式

(new  Integer(String s)). intintValue() 來轉換,用這種方式來返回int類型數據;

 

注意:equals方法在包裝類中,表示的是值相等;

 

Integer x= new Integer(123);

Integer y= new Integer(“123”);

 

x==y爲假,因爲兩個對象;x。equals(y)爲真;

 

JDK的新特性:

基本數據類型新建對象可以直接這麼寫:

Integer x = 123;這樣來建立一個對象,叫做自動裝箱;

x=x+2;這樣寫,是叫做自動拆箱;變成了int類型;

 

注意一點:新特性中x可以爲null,這樣參加運算就會Runtime異常拋出。所以用Integer來聲明時,一定要進行空值判斷;但是用int聲明就不需要;

 

Integer m=128;Integer  n=128;  m==n結果爲假,因爲兩個對象;

Integer x=127;Integer  y=127;     x==y結果爲真;因爲當數值在byte範圍內時,對於新特性,如果該數值已經存在,爲節約內存,則不會再開闢新的空間,新的聲明指向已有的對象;

 

int compareTo(Integer anotherInteger)  一個小方法;

 

 

 

 

 

 

        

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章