一、String 的含義
String 是定義一個字符串對象(內存中的字符串都是一個對象。)
String 一旦被初始化就不能被改變(可以改變變量指向,但是不能改變對象內容)
定義方式: String s1 = “abc”; //在內存中存在一個對象。
String s2 = new String("abc"); //在內存中存在兩個對象。
String s3 = "abc";
比較: s1 == s2 為false
s1 == s3 為true (相同的字符串在靜態池中一旦存在,就不會再產生新的該字符串了,以后其再出現,都使用它)
String的equals方法: s1.equals(s2) == true;
二、字符串的常見方法
1、獲取
1.1、字符串中包含的字符數(也就是字符串的長度)
int length(); (注意與數組中的length做區別,數組中為屬性,字符串中為方法)
1.2、某一個角標位置上的字符
char charAt(int index); (當訪問的角標不存在時,提示字符串角標越界異常)
1.3、根據字符獲取該字符在字符串中的角標位置
int indexOf(int ch); 返回的是字符第一次出現的角標位置。
int indexOf(int ch,int fromIndex); 返回的是從fromIndex開始字符出現的角標位置。
int indexOf(String str); 返回的是字符串第一次出現的角標位置。
int indexOf(String str,int fromIndex); 返回的是從fromIndex開始字符串 出現的角標位置。
(當訪問的字符 或 字符串不存在時,返回 -1)
int lastIndexOf(int ch): 反向索引(種類和解釋與正向索引相同 )
注:反向索引只是從右向左索引找到第一次出現目標的角標位置, 返回的依然是角標位置。
2、判斷
2.1、判斷字符串中是否包含指定字符串
boolean contains(CharSequence s) :CharSequence:為String實現的接口
特殊之處:indexOf(String str):可以索引字符串str第一次出現的位置,如果返回 -1,則表示該str不在字符串內。
所以,也可以用於對指定字符串判斷是否包含。
if(str1.indexOf(“aaa”) == -1)
而且該方法既可以判斷,由能獲取位置。
2.2、判斷字符串是否有內容
boolean isEmpty() :當且僅當長度為0時返回true。
2.3、判斷字符串是否以某某開頭
boolean startsWith(String prefix)
2.4、判斷字符串是否以某某結尾
boolean endsWith(String suffix)
2.5、判斷字符串的內容是否相同
boolean equals(Object anObject) (復寫了Object 類中的equals方法)
2.5、判斷字符串的內容是否相同 ,(不考慮大小寫)
boolean equalsIgnoreCase(String anotherString)
3、轉換。
3.1、 將字符數組轉換成字符串
構造函數: String(char[] value)
String(char[] value, int offset, int count): 將數組中從下標offset開始,一共count位字符轉換成字符串。
靜態方法: static String copyValueOf(char[] data)
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[] data)
3.2、 將字符串轉換成字符數組
char[] toCharArray()
3.3、 將字節數組轉換成字符串
String(byte[] value)
String(byte[] value, int offset, int count): 將數組中從下標offset開始,一共count位字符轉換成字符串。
其他方法參見 3.5。
3.4、 將字符串轉換成字節數組
byte[] getBytes(String charsetName)
3.5、 將基本數據類型轉換成字符串
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(char[] data)
static String valueOf(double d) 等等。
注意:字符串和字節數組在轉換過程中是可以指定編碼表的。
4、替換
String replace(char oldChar, char newChar) : 返回一個數組,它是用newChar 替換就數組中的oldchar等到的。(一個一個的替換)
String replace(CharSequence target, CharSequence replacement) : 后替前,用新串替換原串中的子串。
注:原字符串沒有改變,只是新出現了一個替換后的字符串(字符串一旦初始化,不能改變)
如果要替換的字符沒有,還是返回原串,不會生成新的字符串。
5、切割,分割
String[] split(String regex) : 指定其中某一個字符或字符串,以其下刀,切割字符串(其實應當依據正則表達式規則拆分)
6、子串:(獲取一個字符串的一部分)
String substring(int beginIndex) //從指定下標位置到結尾。
String substring(int beginIndex, int endIndex) //從指定下標位置到結束下標位置前一個
7、轉換、去除空格、比較
7.1:將字符串轉換成大寫或者小寫。
String toUpperCase()
String toLowerCase()
7.2:將字符串兩端多余的空額去除。
String trim()
7.3:將兩個字符串進行自然順序的比較。
int compareTo(String anotherString)
int compareToIgnoreCase(String str) :不考慮大小寫。
從第一位開始比較,比參數大返回正數,比參數小返回負數,都相等返回參數為0:一旦在某一位上分出大小了,便不再向后比較。
三、StringBuffer
定義:字符串緩沖區, 為一個容器。
特點:
1、長度可變化。
2、可以直接操作多個數據類型。
3、最終通過toString方法返回一個字符串。
c: create u: update r:read d: delete
1、存儲
StringBuffer append():將指定數據作為參數添加到已有數據的結尾處。
注:在StringBuffer對象調用appeed方法后,返回的就是其本身。
StringBuffer insert(int offset, 基本數據 b) : 從offest下標位開始插入 基本數據類型、字符串或者數組 b。
注:在StringBuffer對象調用insert方法后,返回的就是其本身。
2、刪除
StringBuffer delete(int start, int end) : 移除下標start到 end-1的字符。
注:在StringBuffer對象調用delete方法后,返回的就是其本身。
StringBuffer deleteCharAt(int index) : 移除此序列指定下標位置的字符(char)。
注:在StringBuffer對象調用deleteCharAt方法后,返回的就是其本身。
清空緩沖區: sb.delate(0,sb.length());
3、獲取
char charAt(int index) 返回此序列中指定索引處的 char 值。
int indexOf(String str) 返回第一次出現的指定子字符串在該字符串中的索引。
int indexOf(String str, int fromIndex) 從指定的索引處開始,返回第一次出現的指定子字符串在該字符串中的索引。
int lastIndexOf(String str) 返回最右邊出現的指定子字符串在此字符串中的索引。
int lastIndexOf(String str, int fromIndex) 返回最后一次出現的指定子字符串在此字符串中的索引。
String substring(int start) 返回一個新的 String,它包含此字符序列當前所包含的字符子序列。
String substring(int start, int end) 返回一個新的 String,它包含此序列當前所包含的字符子序列。
注意:這里返回的是String,不StringBuffer。
String toString():放回當前緩存區字符串。
int length(): 返回字符數。
4、修改
StringBuffer replace(int start, int end, String str) 在start和end之間,用str替換
void setCharAt(int index, char ch) 在index下標位置使用 字符dh替換原字符
5、反轉
StringBuffer reverse()
6、
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
將緩沖區中的指定數據存到指定的字符數組中,從指定位置開始存。
四、StringBuilder
在jdk 1.5之后新加功能
其余StringBuffer功能一樣。
與StringBuffer的區別:
StringBuffer是線程同步的。
StringBuilder是線程不同步的。
當是單個線程操作緩沖區時,建議使用 StringBuilder 其有更高的效率。
五、jdk版本升級的三因素
1、提高安全性
2、提高效率
3、簡化書寫