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;
