字符串在開發(fā)中的重要程度不言而喻,必會而且要精通,其中帶來的好處只有自己才清楚。
一、創(chuàng)建字符串
- 創(chuàng)建一個空字符串
// 創(chuàng)建一個空字符串
String str1 = new String();
- 用一個字符數(shù)組創(chuàng)建一個字符串 String(char[] c)
char[] c = new char[] {'a','b','c','d','e','f','g'};
String str2 = new String(c);
System.out.println(str2);
3.提取字符數(shù)組中的一部分創(chuàng)建一個字符串對象 String(char[] c,int offset, int length)
// 3個參數(shù)的意思:(字符數(shù)組的名字,起始索引,長度)
char[] c2 = new char[] {'h','a','h','n','i','c','e','i','o','s'};
String str3 = new String(c2, 3, 4);
System.out.println(str3);
二、字符串的基本操作
- 連接字符串
String str4 = new String("Hello");
String str5 = new String("World!");
System.out.println(str4 + " " + str5);
- 字符串連接其他類型
// 25是數(shù)值類型的數(shù)據(jù),在使用‘+’進行連接操作時,會將25轉(zhuǎn)化為String類型 "25"
String str6 = new String("我今年");
System.out.println(str6 + 25 + "歲了!");
- 獲取字符串的長度
// 值得注意的是,如果字符串中有空格,每一個空格也算作一個長度
int strLength = str6.length();
System.out.println(strLength);
- 獲取指定字符的索引位置
// 有兩個方法可以獲取字符的索引,indexOf()和lastIndexOf()
String str7 = new String("haha,very interesting.");
// indexOf()方法取得第一次出現(xiàn)某個字符的位置
int firstIndex = str7.indexOf('v');
System.out.println("在str7中,字符‘V’第一次出現(xiàn)的位置索引為:" + firstIndex);
int lastIndex = str7.lastIndexOf('t');
System.out.println("在str7中,字符‘t’最后一次出現(xiàn)的位置索引為:" + lastIndex);
// 如果被搜索的字符串中沒有這個字符,那么返回-1
int SearchIndex = str7.indexOf('b');
System.out.println(SearchIndex);
- 獲取指定索引位置上的字符 charAt()
// 注意索引的大小,絕對不能大于字符串的長度-1,如果大于長度會報java.lang.StringIndexOutOfBoundsException異常
String str8 = new String("that's easy");
System.out.println(str8.charAt(4));
- 除去字符串的空格,2種方法,一種是除去字符串前部和尾部的空格,另一種是除去字符串中全部的空格
String str9 = " I'm fine. ";
// 除去前部和尾部的空格 str.trim();
System.out.println(str9.trim());
// 除去字符串中所有的空格
// StringTokenizer(String str, String delim) str表示要除去空格的字符串,delim表示從str中取出的字符
StringTokenizer st = new StringTokenizer(str9, " ");
StringBuffer sb = new StringBuffer(); // 定義字符串緩存對象
int i = 1;
while(st.hasMoreTokens()){
i++;
sb.append(st.nextToken()); // 向字符串生成器中追加內(nèi)容
}
System.out.println("去掉所有空格后的str9:" + sb.toString());
// replaceAll()
String str10 = new String(" jk fld jkfd jfk jsdf");
str10 = str10.replaceAll(" ", "");
System.out.println(str10);
- 替換字符串
// 用一個新的字符串替換原來字符串的指定的子字符串 str.replace(String regex, String replacement)
String s = new String("bad bad study");
String s2 = s.replace("bad", "good");
System.out.println(s2);
// 如果只想替換第一個匹配的子字符串
String s3 = s.replaceFirst("bad", "good");
System.out.println(s3);
// 假如有要替換的字符串在原字符串有多個,可以使用for循環(huán)執(zhí)行str.replaceFirst(strold, strnew);
- 判斷字符串是否相等
// 2中方法,equals() 和 equalsIgnoreCase()
// equals() 嚴格區(qū)分大小寫,在此情況下仍有相同的字符和長度時,結(jié)果為true,否則為false。
String s4 = new String("nice");
boolean result = s4.equals("nice");
System.out.println(result);
// equalsIgnoreCase() 在忽略大小寫的情況下,如果仍有相同的字符和長度時,結(jié)果為true,否則為false。
String s5 = new String("NICE");
boolean result2 = s5.equalsIgnoreCase(s4);
System.out.println(result2);
// ==在比較字符串時,比較的是內(nèi)存位置,不建議使用。在數(shù)值型中可以使用。
- 判斷字符串是不是以指定的內(nèi)容開始或者結(jié)尾
// 判斷字符串是不是以 "abc" 開頭
String s6 = new String("abcqweriop");
System.out.println(s6 + "是否以abc開頭的字符串?" + s6.startsWith("abc"));
// 判斷字符串是不是以 "op" 結(jié)尾
System.out.println(s6 + "是否以op結(jié)尾的字符串?" + s6.endsWith("op"));
- 字母大小寫轉(zhuǎn)換
String s7 = new String("HfdkDRTvcC");
// 全部轉(zhuǎn)為小寫
System.out.println(s7 + "全部轉(zhuǎn)換為小寫字母:" + s7.toLowerCase());
// 全部轉(zhuǎn)為大寫
System.out.println(s7 + "全部轉(zhuǎn)換為大寫字母:" + s7.toUpperCase());
// 以上兩個方法在轉(zhuǎn)換時,對字符串中的數(shù)字和其他字符不做改變
- 分割字符串 str.split(String s);
// 用s來分割str,別把分割后的結(jié)果返回一個字符串?dāng)?shù)組
String s8 = new String("qwe,rty,uio,p[]");
String[] sArr = s8.split(",");
for (String ss : sArr) {
System.out.print(ss);
}
System.out.println();
// split()的另外一種重載
// str.split(String sign, int limit); sign為分隔符,limit為拆分的份數(shù)
// 例如,分割為2份,只去掉一個‘,’。分割為3份,去掉2個‘,’
String[] strLimit = s8.split(",", 2);
for (String ss : strLimit) {
System.out.print(ss);
}