java基礎_08_String_StringBuffer_StringBuilder

String

特點:一但被初始化就不可以被改變。

注:java 中 char[] 就是一個字符串,concat() 方法的底層實現原理就是用數組複製完成。

下面還是通過一些實例來了解Stirng 的一些用法吧!

例:

String s1 = "abc";   //s1 是一個類的類型變量,“abc”是一個對象。

            String s2 = new String("abc");

            String s3 = "abc";

 

           s1 和 s2 有什麼區別? 

              s1在內存中有一個對象

              s2在內存中有兩個對象

 

     “= =” 和 equals 的區別?

   = = 判斷的是地址值,看是否是指向同一個對象。

   equals 判斷的是字符串的內容是否相同。

如:

System.out.println(s1==s2);  //答案 false  判斷的是地址值

      System.out.println(s1==s3);  // true   s3指向“abc”對象 內存中已存在(s1先已創建),所s1s3指向的是同一個字符串對象

      System.out.println(s1.equals(s2)); // true   該方法用於判斷字符串是否相同

 

字符串常用功能:

charAt(int index)返回指定索引處的 char 值

compareTo(String anotherString)按字典順序比較兩個字符串

compareToIgnoreCase(String str)按字典順序比較兩個字符串,不考慮大小寫

contains(CharSequence s)當且僅當此字符串包含指定的 char 值序列時,返回 true

indexOf(String str)返回指定字符在此字符串中第一次出現處的索引

indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出現處的索引,從指定的索引開始。

replace(char oldChar, char newChar) 替換,返回一個新的字符串

split(String regex)根據給定正則表達式的匹配拆分此字符串

substring(int beginIndex, int endIndex)  返回指定子串

toCharArray()返回字符數組

valueOf(Object obj)返回 Object 參數的字符串表示形式

 

更改字符串中某一字符或子串,使用替換功能。

String s1 = s.replace(  a  ,  x);  

String s2 = s.replace( abc   ,  xxx );

注意: replace 方法返回的是一個新串。

 

將字符串轉化爲char數組

char  chr  []  =  s.toCharArray() ;

 

去除字符串前後端的空格 ,trim() 方法。

下面模擬實現一個跟trim() 有相同功能的方法。

思路:

1,判斷字符串第一個位置是否是空格,如果是繼續向下判斷

2,當開始和結尾都判斷到不是空格時,就是要獲取的字符串

public  String  myTrim(String str)

           {

                 int start = 0,end = str.length()-1;

                 while(start<=end && str.charAt(start)==' ')

                     start++;

                 while(start<=end && str.charAt(end)==' ')

                     end--;

                 return str.substring(start,end+1);

             }

       將字符串進行反轉,或將字符串中指定部分進行反轉

思路: 

1,可以對數組元素進行反轉

2,將字符串變成數組,對數組反轉

3,將反轉後的數組變成字符串

4,將反轉的開始和結束位置作爲參數即可

 

或:可以使用 StringBuffer 來完成。該類有 反轉方法 reverse() ;使用這個更方便。

例:

1, 用自己寫的方法來反轉

public String exchange(String s,int start,int end)

                  {

                       char chr [] = s.toCharArray();

                      char cr;

                       for(int i=start,j=end;i<j;i++,j--)

                       {

                          cr = chr [i];

                          chr [i] = chr [j];

                          chr [j] = cr;

                        }

                       return new String(chr);

                   }

2, 使用StringBuffer reverse() 方法

StringBuffer sb = new StringBuffer();

sb.append(字符串);

sb.reverse();

 

獲取一個字符串s1在另一個字符串s2中出現的次數

思路:

1,定義一個計數器

2,獲取s1s2中第一次出現的位置

3,從第一次出現的位置後剩餘的子串中繼續找,找到一個計數一次

4,當獲取不到時,計數完成

如:

public int method(String s1,String s2)

{

    int count = 0;

    int start = 0;

    while((start=s2.indexOf(s1,start))!=-1)  //如果有,則繼續往下查找。

    {

       start=start+s1.length();  //得從找到的角標+字符串本身長度再開始找

       count++;

    }

    return count;

 }

找出兩個字符串中最大的子串

思路:

1,將短的那個字符串 按長度遞減的方式 去在長的字符串中找是否包含

0--短串.length()-0

0--短串.length()-1

1--

0--短串.length()-2

1--

2--

3--

例:

 public static String maxString(String s1,String s2)

{

//方便傳進來不區分長短

String longString,shortString;

longString = (s1.length()>s2.length())?s1:s2;

shortString = (longString==s1)?s2:s1;

//取最大子串,所以從短串中最長開始找

for(int i=shortString.length();i>0;i--)

{

for(int j=0;(j+i)<=shortString.length();j++)

{

String s = shortString.substring(j,j+i);

// out(s);//打印取子過程

if(longString.contains(s))

return s;

}

}

return null;

}

 

StringBuffer

是字符串緩衝區,是一個容器。

 

特點

1,長度是可變化的

2,可以同時操作多個數據類型

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

 

JDK1.5 版本之後出現了 StringBuilder 其功能差不多 

StringBuffer 是線程同步的

StringBuilder 線程不同步的

 

下面來熟悉下它的一些基本的操作。

StringBuffer sb = new StringBuffer();

      StringBuffer sb1 = sb.append(34);

      sop(sb==sb1);// 注意:sbsb1是同一個對象

      sb.append("abcd--").append(true).append(123);  //可以加入任何類型數據,最後會轉變成字符串

      //刪除

      sb.delete(0,2);

     sb.deleteCharAt(3); //刪除某一位

      //清空緩衝區

     sb.delete(0,sb.length());

 

     //修改

      sb.setCharAt(5,'x'); /修改某一個

     //反轉

      sb.reverse();

      //將緩衝區中的字符串取出來存到字符數組中

      StringBuffer sb2 = new StringBuffer("abcdefg");

      char chr[] = new char[6];

      sb2.getChars(1,4,chr,1);//sb21-4的字符存到chr中 從1開始放

 

心得:

字符串的使用在程序中非常多,對於的字符串的操作那就得非常熟悉了,對字符串的操作,不只有String 類的方法,還可以使用StringBuffer 的方法,StringBufferStringBuilder的用法差不多。只是是否同步的問題。正則表達式:專門用來操作字符串的,有了這個大大提高了操作字符串的效率。所以對正則的學習尤爲重要。


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