黑馬程序員_Java基礎_String和StringBuffer類

------- android培訓java培訓、期待與您交流! ----------




String類常用API:

 1.獲取
 1.1 字符串中的包含的字符數,也就是字符串的長度
 int length():獲取長度。
 1.2 根據位子獲取位子上某個字符。
 char chatAt(int index):
 1.3 根據字符獲取該字符在子串中的位子
 int indexOf(String str):返回的是str在字符串中第一次出現的位子
 int indexOf(String str, int fromIndex):從fromIndex指定位置開始,獲取str在字符串中出現的位置
 int lastIndexOf(String str): 從字符串後面位置開始,獲取str在字符串中出現的位置


 2.判斷
 2.1 字符串中是否包含某一個字符串
 boolean contains(String str):
 特殊之處:indexOf(String str):可以索引str第一次出現位置,如果返回-1,表示該str不在字符串中,
 所以,也可以用於對指定判斷是否包含。
 if(str.indexOf("aaa") != -1)
 而且該方法既可以判斷,又可以獲取出現位置。

 2.2 判斷字符串是否有內容
 boolean isEmpty():  原理就相當於判斷字符串長度是否爲0

 2.3 判斷字符串中是否以指定內容開頭
 boolean startsWith(str);

 2.4 字符串是否以指定內容結尾
 boolean endsWith(str);

 2.5 判斷字符串內容是否相同
 boolean equals(str);

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

 3.轉換
 3.1 將字符數組轉換成字符串
 構造函數: String(char[])
 String(cha[], offset,count):  將字符數組中的一部分轉成字符串

 靜態方法: static String copyValueOf(char[]);
 static String copyValueOf(char[], int offset ,int count)
 static String valueOf(char[])

 3.2 將字符串轉成字符數組
 char[] toCharArray();

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

 3.4 將字符串轉換層字節數組
 byte[] getBytes()

 3.45 將基本數據類型轉化成字符串
 static String valueOf(int)
 static String valueOf(double)

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

 4.替換
 String replace(oldchar ,newchar)  
 將字符串中所有的oldchar替換成newchar   如果沒有找到對應的oldchar,返回原來的字符串

 5. 切割(非常實用)
 String[] split(str);

 6.子串
 String substring(begin);
 String substring(begin,end);   *子串中不包含end下標中的字串

 7. 轉換、比較、去空格
 7.1 將字符串轉換成大小寫
 String toUpperCase()    轉換成大寫
 String toLowerCase()    轉換成小寫

 7.2去掉字符串兩端的空格 
 String trim();

 7.3對兩個字符串進行自然順序的比較
 int compareTo(String)   
 返回值等於零:兩個字符串相等 
 小於零: 傳入參數大於字符串
 大於零:傳入參數小宇字符串

例子1:
//字符串是一個特殊的對象
public class StringDemo {

	public static void main(String[] args) {
		String s1 = "abc"; // s1是一個類型變量,“abc”是一個對象,一旦被初始化就不可被改變
		String s2 = new String("abc");
		String s3 = "abc";

		// s1和s2的區別
		// 第一句在內存中只有一個對象
		// 第二句s2在內存中有兩個對象

		System.out.println(s1 == s2);
		System.out.println(s1.equals(s2));
		System.out.println(s1 ==  s3);

		// 結果:false
		// true
	}

}

例子2:
public class StringDemo2 {
    public static void test7() {
        String s = "    Hello  word!     ";
        print(s.toUpperCase()); // 轉成大寫
        print(s.toLowerCase()); // 轉換小寫
        print(s.trim()); // 去掉首尾空格
        String s1 = "abc";
        String s2 = "abb";
        print(s1.compareTo(s2)); // 比較兩個字符串
    }
    public static void sub() {
        String a = "abcdef";
        print(a.substring(2)); // 從指定位置開始到結尾,如果下標不存在,會出現字符串下標越界異常
        print(a.substring(2, 4)); // 包含頭,不包含尾,
    }
    public static void split() {
        String str = "tomcat,apache,java";
        String[] arr = str.split(",");
        for (String a : arr)
            print(a);
    }
    public static void replace_1() {
        String str = "hello java";
        String s1 = str.replace("java", "wrod");
        print(s1);
    }
    public static void change() {
        char arr[] = { 'a', 'b', 'c', 'd', 'e' };
        String str = new String(arr);
        print(str);
        char arr2[] = str.toCharArray();
        for (int i = 0; i <= arr2.length; i++)
            print(arr2[i]);
        print(str);
    }
    /*
     * 文件名的判斷
     */
    public static void is() {
        String str = "StringDemo.java";
        // 判斷文件名是否以String開頭
        print(str.startsWith("String"));
        // 判斷文件是不是.java格式
        print(str.endsWith(".java"));
        // 判斷文件中時候含有Demo字符串內容
        print(str.contains("Demo"));
    }
    /*
     * String的獲取方法
     */
    public static void get() {
        String str = "abcdekakf";
        // 獲取字符串指定下標的字符
        print(str.charAt(5)); // 當下標超出字符串的長度時,或拋出StringIndexOutOfBoundsException異常
        print(str.length()); // 字符串長度
        print(str.indexOf("dek")); // 獲取指定字符所在位子的下標 當字符串中沒有指定的字符時,輸出-1
        print(str.indexOf("a", 3)); // 從指定位子3開始進行查找指定字符下標 當字符串中沒有指定的字符時,輸出-1
        print(str.lastIndexOf("a")); // 從字符串的後面進行開始查找指定字符的位子
    }
    public static void main(String[] args) {
        test7();
        // split();
        // change();
        // replace_1();
        // is();
        // get();
    }
    // 打印輸出方法 使用的喲
    public static void print(Object obj) {
        System.out.println(obj);
    }
}

例子3:
 
/*
 * 模擬String中 的strim方法,去掉字符串兩邊的空格
 */ 
public class MyStrimDemo {
    public static void main(String[] args) {
        String str = "     hello word    ";
        System.out.println(mytrim(str));
    }
    public static 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);
    }
}
 例子4:
/*
 練習:
 1. 翻轉字符串
 2. 計算指定字符串出現次數
 3. 獲取兩個字符串中最大相同子串,
 */
public class DIYString {
    public static void main(String[] args) {
        // String str = "0123456789";
        // print(overturn(str));
        // print(overturn(str, 0, 5));
        // String str = "abeeeeeeeabkkkkkkkkab";
        // print(getSubCount(str, "ab"));
        String s1 = "gegeasgHellogege";
        String s2 = "aaaaHelloooo";
        print(getMaxSub(s2, s1));
    }
    // 3. 獲取兩個字符串中最大相同子串
    public static String getMaxSub(String s1, String s2) {
        String max = "";
        String min = "";
        max = s1.length() > s2.length() ? s1 : s2;
        min = max == s1 ? s2 : s1;
        for (int i = 0; i < min.length(); i++) {
            for (int j = 0, x = min.length() - i; x != min.length() + 1; j++, x++) {
                String temp = min.substring(j, x);
                if (max.contains(temp))
                    return temp;
            }
        }
        return null;
    }
    // 2.計算指定字符串出現次數 這種方式消耗資源小
    public static int getSubCount(String str, String key) {
        int index = 0;
        int count = 0;
        while ((index = str.indexOf(key)) != -1) {
            str = str.substring(index + key.length());
            count++;
        }
        return count;
    }
    // 選擇翻轉
    public static String overturn(String str, int start, int end) {
        char[] cha = str.toCharArray();
        return new String(reversalArr(cha, start, end));
    }
    // 全部字符串反轉
    public static String overturn(String str) {
        char[] cha = str.toCharArray();
        return String.valueOf(reversalArr(cha, 0, cha.length - 1));
    }
    // 翻轉數組
    public static char[] reversalArr(char[] arr, int start, int end) {
        for (int i = start, j = end; i <= j; i++, j--) {
            char temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        return arr;
    }
    // 打印
    public static void print(Object obj) {
        System.out.println(obj);
    }
}
StringBuffer類常用API:  
 StringBuffer: 是一個容器,是字符串緩衝區,而且長度是可以改變的,可以操作多種數據類型
 StringBuffer 是線程同步的(安全)
 StringBuilder是線程不同步的,但效率高(開發建議使用)
 
 JDK1.5版本之後出現StringBuilder
 升級三個因素:
 提高效率
 簡化書寫
 提高安全性

 1. 存儲
 StringBuffer append():將指定數據作爲參數添加到已有數據結尾處。
 StringBuffer insert(index,數據):可以將數據插入到指定index位置

 2. 刪除
 StringBuffer delete(start,end):刪除緩衝區中的數據,包含start,不包含end.
 StringBuffer deleteCharAt(index):刪除指定位置的字符。

 3. 獲取
 int indexOf(String str)
 int lastIndexOf(String str)
 int length()
 String sustring(int start ,int end)

 4. 修改
 StringBuffet replace(int start,int end,String str)   替換,不包含end
 void setCharAt(int index, char ch)   只替換指定位子的一個字符

 5.翻轉
 StringBuffer reverse(); 

StringBuffer例子1: 
public class StringBufferDemo {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // add();
        // delete();
        // update();
        reverse();
    }
    // 翻轉測試
    public static void reverse() {
        StringBuffer buf = new StringBuffer("123456789");
        buf.reverse();
        print(buf.toString());
    }
    public static void update() {
        StringBuffer buf = new StringBuffer("123456789");
        buf.replace(1, 3, "**"); // 替換不包含end位置
        print(buf.toString());
        buf.setCharAt(8, '0');
        print(buf.toString());
    }
    public static void delete() {
        StringBuffer buf = new StringBuffer("123456789");
        buf.delete(1, 3); // 當下標超出時,會拋出下標越界異常
        print(buf.toString());
        buf.deleteCharAt(0); // 刪除第一個字符
        print(buf.toString());
    }
    public static void add() {
        StringBuffer buffer = new StringBuffer();
        buffer.append("gege").append(false).append(123);
        print(buffer.toString());
        buffer.insert(1, "**");
        print(buffer.toString());
    }
    // 打印
    public static void print(Object obj) {
        System.out.println(obj);
    }
}




 


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