String類

1.String 類:

java用於描述字符串數據的對象。

特點:String類型一旦初始化就不能再被賦值,因爲是常量。字符串存儲在字符串常量池中,實現數據共享。
常量池的好處:不用每次都開闢空間,每次創建字符串對象之前,都會在字符串常量池中查找,如果有,就直接獲取其地址,若沒有則創建一個,方便下次使用。

2. "abcd"和new String("abcd")的區別:

"abcd":在字符串常量池中創建的一個"abcd"對象;
 new String("abcd"):在堆內存通過new創建了一個String類型的對象且在常量池中創建了一個"abcd"對象,並稱其地址傳給了堆內存new對象的構造函數。

記住:一般比較對象用的都不是==,而是equals,string重寫equals方法,定義了自己對象相同的比較方式。用來比較字符串是否相同。


3.String類中的常見方法
   
  indexOf(str,fromindex): 獲取子串str在字符串從索引fromindex開始第一次出現的位置;
  
  length(): 獲取字符串的長度;
  
  charAt(int a): 某位置上的字符;
  
  indexOf(char):獲取字符char在字符串中第一次出現的位置;
  
  replace(str,key):用字符串str來替換字符串中的一部分字符串key;
  
  replace(target,replacement):用replacement來替換目標位置target的字符串;
 
  subString(begin,end):取出begin到end間的一部分字符串;取出的是begin到end-1的值;
  
  tocharArray():將字符串變成很多字符;返回char[];
 

  LastindexOf():從後往前獲取第一次出現的位置,但角標還是從前往後的。

4.通過練習學習String類的方法。
  
  1.練習一:兩個字符串的最大相同子串。
 
  思路:
  
  1.通過字符串的長度來判斷長串和短串;
  2.獲取短串的所有子串(也可以獲取長串的子串,只是相對效率較低);
  3.再判斷從長到短的子串是否包含於長串中,如果包含在其中,則返回該子串。
  
  包含的方法:
  length():獲取字符串的長度,返回值類型int。
  substring(i,j):獲取字符串i角標到j-1角標的子串,返回值類型爲String。
  contains(s):判斷字符串s是否包含在另一字符串中,返回值類型爲boolean。
 
  2.練習二:將字符串按自然順序排序。
 
  思路: 1.以前學過數組排序,所以先將字符串轉爲一個字符數組;
   2.對字符數組中的元素進行排序,和整型數組元素排序差不多,比大小;
   3.最後再將字符數組轉爲一個新的字符串。
 
   或者直接用Arrays類的方法sort快速排序,效率最高。
  
  包含的方法:
  toCharArray():將字符串轉爲字符數組,返回char[] 類型。
  new String(char[] ch):將一個字符數組轉爲新的字符串;
  copyValueOf(char[] ch):返回數組組成的新字符串;返回類型是String;
  valueOf(char[] ch):返回數組組成的新字符串;返回類型是String;
  或者直接用Arrays.sort(char[] ch);
  
  3.練習三:將字符串反轉,如absdf-->fdsba.
  
  思路:將字符串中的字符進行頭尾置換,頭自增,尾自減,直到頭>尾結束置換,再返回字符串。
  
  包含的方法:
  charAt(int index):返回index角標的字符。
 
  4.練習四:對字符串數組進行排序。
  
  思路:和整型數組排序是一樣的,通過String類的compareTo方法來比較字符串的大小,如果結果大於0,則交換位置。
  
   包含的方法:compareTo(String s):返回值爲int型。
  
  5.練習五:對字符串數組取最值。
  
  思路:先定義一個max來存儲最大值的角標,初始化爲0,然後通過比較compareTo方法將數組中
  的每個元素與最大值比較,其它和整型數組中求最值一樣。
  
  使用的方法:compareTo(String s):返回值爲int型。
  
  5.字符串緩衝區StringBuffer
 
  1.特點: 1.它是一個容器,可以存儲任意類型的數據元素;
  2.它的長度是可變的;
  3.內部有synchronized,可用於多線程同步,安全;
  4.可以對其中存入的內容和長度進行修改;
  5.具備容器的基本方法:添加、刪除、修改、獲取;
  6.裏面的數據最終還是會轉成字符串數據給別人使用。
  
  2.基本方法:
  
  添加: append(Object obj):添加obj到StringBuffer中已有數據的後面;
  如:

				StringBuffer sb=new StringBuffer();   
				  sb.append("df").append(98).append('d');
				insert(index,obj)://將obj插入到角標爲index處,返回一個新的字符串。

  如:sb.insert(2,"dfs");
  
  刪除:delete(start,end):刪除角標爲start到end-1之間的字符串;
  需要注意的是:若end>count,則默認爲end=count;若start<0,則拋出異常。
  如:sb.delete(0,sb.length):清空緩衝區;
  
  deleteCharAt(index):刪除index角標處的單個字符。
  如:sb.deleteCharAt(3);
 
  修改:replace(start,end,str):用str替換角標爲start到end-1的一部分字符串;
  如:sb.replace(1,3,"ds");
 
  setCharAt(index,str):將index處的字符用str替換,即替換單個字符;返回類型爲void;
  如:sb.setCharAt(2,"ds");
  
  獲取:indexOf(s):獲取s在另一個字符串中的位置,返回int類型;
   length():獲取字符串的長度;
   setLength(i):設置字符串的長度爲i;如:setLength(0):清空緩衝區。
   reverse():反轉字符串;
  等等方法。
  
   思考題:既然數組和StringBuffer都是容器,有什麼區別?
       區別: 1.數組長度是固定的,而StringBuffer的長度是可變的;
    2.數組一旦定義必須明確存儲的元素類型,而StringBuffer存儲的是任意類型的;
   3.數組可以通過索引獲取元素,而StringBuffer在調用時,只能將其轉成字符串,無法直接使用其中單個元素。
  
  3.StringBuffer內部原理:
  1.其實該類中用於存儲數據的容器就是數組,類型爲char,調用的時候轉成字符串再使用;
  2.內部是一個長度可變的數組;
  數組長度可變原理:創建StringBuffer對象時,就會建立一個數組實體,長度是16個字符,如果超出16個字符,就會新創建一個
   長度規律增長的數組,將原數組的元素複製到新的數組,並將新元素添加到新數組中。
  
  4.使用條件:只要有多種類型的數據,並最終要變成字符串,就可以使用StringBuffer。
  
  6.SringBuilder:出現在JDK1.5版本後。
  StringBuffer和StringBuilder的區別:
  StringBuffer:能用於多線程,同步安全,但效率低,適用於多線程;
  StringBuilder:用於單線程不同步,但效率高,適用於單線程。
  
7.基本數據類型對象包裝類
  共八中基本數據類型:byte,int,char,long,float,double,short,boolean.
  
  1.最常用的Integer:被final修飾,不能再被繼承。
  將int類型封裝成對象,作用之一是提供了能在int類和String類型之間相互轉換的方法。
  
      ★ 基本數據類型base-->字符串
    1.通過+"";
    2.通過String類的valueOf(base)方法;
    3.通過Integer類中的構造函數+toString();如:Integer i=new Integer("12");i.toString();
    4.通過Integer類中的靜態函數 toString(base);如:Integer.toString(3);
   
      ★ 字符串-->基本數據類型base
    1.通過Integer類的構造函數+intValue();
    2.通過Integer類的靜態方法 parseInt(str);
    注意:這裏的str只能是數字格式的字符串,如果不是,則會拋出異常,但是又沒處理,所以繼承了RuntimeException,
      不用標識出來,標識出來是因爲可以處理,預先給出處理方案。
    parseInt(str):可以將其他進制轉換爲十進制,因爲默認爲十進制。
    parseInt(str,基數):標示str爲基數進制的數字格式字符串。
    
  2.基類對象包裝類的特性(JDK1.5後):
  ★ 自動裝箱拆箱:
  
  如:Integer i=new Integer(3);
  可以寫成Integer i=3;這就叫自動裝箱,在內部實現了Integer.valueOf(3),將3變成了一個對象賦給i;
 
  i=i+3;這叫自動拆箱;在內部先將對象i轉爲整數即i.intValue(),這時再加3,自動拆箱過程;
  全寫:Integer i=Integer.valueOf(i.intValue()+3);
 
  作用:簡化書寫,但有弊端。
  弊端:如果Integer i=null; i就不能調用intValue方法了,會編譯失敗。
  注意:自動裝箱時,如果參數在byte範圍[-128,127]內,則valueOf方法返回同一個對象,否則返回一個新的對象。
  如:

				 Integer i=128;
  				Integer j=128;
  				System.out.println(i==j);
  //結果爲false,因爲128不在byte範圍[-128,127]內,所以i和j都各自返回一個新的對象。


發佈了32 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章