String 類(lèi)的常用方法
compareTo方法
用途:比較兩字符串,返回值為整型
-
源碼:
public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = Math.min(len1, len2); // 取兩字符串中較短字符串的長(zhǎng)度 char v1[] = value; char v2[] = anotherString.value; // 在上述長(zhǎng)度區(qū)間內(nèi)依次對(duì)比各字符是否相等 int k = 0; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; // 當(dāng)某位置處兩字符串中的字符不相等時(shí)虐唠,返回不相等字符的ASCII碼差值 } k++; } return len1 - len2; // 若上述長(zhǎng)度區(qū)間內(nèi)所有字符均相等則返回兩字符串長(zhǎng)度的差 }
-
舉例:
public class CompareToExample { public static void main(String args[]) { String str1 = "String method tutorial"; String str2 = "compareTo method example"; String str3 = "String method tutorial"; String str4 = "String method "; int var1 = str1.compareTo(str2); System.out.println(var1); // -16(返回字符S和字符c的ASCII碼差值:83 - 99) int var2 = str1.compareTo(str3); System.out.println(var2); // 0 int var3 = str2.compareTo("compareTo method example"); System.out.println(var3); // 0 int var4 = str3.compareTo(str4); System.out.println(var4); // 8(返回兩字符串長(zhǎng)度差) } }
concat方法
用途:拼接字符串贷痪,返回值為String
-
源碼:
public String concat(String str) { int otherLen = str.length(); // 獲得待拼接字符串的長(zhǎng)度 if (otherLen == 0) { return this; // 若傳入的字符串長(zhǎng)度為0則返回原字符串 } int len = value.length; // 獲得原字符串的長(zhǎng)度 char buf[] = Arrays.copyOf(value, len + otherLen); // 定義一個(gè)大小為原字符串和傳入字符串長(zhǎng)度之和的char數(shù)組,并將原字符串存儲(chǔ)到該數(shù)組中 str.getChars(buf, len); // 將傳入字符串放入char數(shù)組存儲(chǔ)的原字符串字符之后 return new String(buf, true); // 由char數(shù)組生成新字符串并返回 }
-
舉例:
String s1 = "Hello"; String s2 = " "; String s3 = "world"; String s4 = s1.concat(s2).concat(s3); System.out.println(s4); // Hello world
equals方法
用途:比較兩字符串是否相同帖鸦,返回值為布爾值
-
源碼:
public boolean equals(Object anObject) { // 首先判斷兩個(gè)對(duì)象的內(nèi)存地址是否相同 if (this == anObject) { return true; } // 判斷傳入的對(duì)象是否為String類(lèi)型 if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; // 獲得原字符串長(zhǎng)度 //長(zhǎng)度相同的情況下逐一比較 char 數(shù)組中的每個(gè)元素是否相同 if (n == anotherString.value.length) { char v1[] = value; // 獲得原字符串存儲(chǔ)的字符數(shù)組 char v2[] = anotherString.value; // 獲得傳入字符串存儲(chǔ)的字符數(shù)組 int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
-
舉例:
String s1 = new String("HELLO"); String s2 = new String("HELLO"); System.out.println(s1.equals(s2)); // true
equalsIgnoreCase方法
用途:在忽略大小寫(xiě)的前提下比較兩字符串是否相同芝薇,返回值為布爾值
-
舉例:
String s1 = new String("apple); String s2 = new String("Apple"); System.out.println(s1.equalsIgnoreCase(s2)); // true
contentEquals方法
-
用途:比較字符串和傳入的對(duì)象的內(nèi)容是否相同,返回值為布爾值
- 該方法與equals和equalsIgnoreCase方法的區(qū)別在于作儿,equals和equalsIgnoreCase方法首先檢查傳入的參數(shù)是否為字符串再進(jìn)行比較洛二,而contentEquals方法僅比較兩者的內(nèi)容
-
源碼:
// 先判斷傳入?yún)?shù)的類(lèi)型,當(dāng)傳入?yún)?shù)為字符串時(shí)攻锰,使用equals方法比較晾嘶,當(dāng)傳入?yún)?shù)不為字符串時(shí)僅比較傳入?yún)?shù)的內(nèi)容與原字符串是否相同 public boolean contentEquals(CharSequence cs) { // Argument is a StringBuffer, StringBuilder if (cs instanceof AbstractStringBuilder) { if (cs instanceof StringBuffer) { synchronized(cs) { return nonSyncContentEquals((AbstractStringBuilder)cs); } } else { return nonSyncContentEquals((AbstractStringBuilder)cs); } } // Argument is a String if (cs instanceof String) { return equals(cs); } // Argument is a generic CharSequence char v1[] = value; int n = v1.length; if (n != cs.length()) { return false; } for (int i = 0; i < n; i++) { if (v1[i] != cs.charAt(i)) { return false; } } return true; } private boolean nonSyncContentEquals(AbstractStringBuilder sb) { char v1[] = value; char v2[] = sb.getValue(); int n = v1.length; if (n != sb.length()) { return false; } for (int i = 0; i < n; i++) { if (v1[i] != v2[i]) { return false; } } return true; }
-
舉例:
String s = "hello world"; StringBuilder sb = new StringBuilder("hello world"); System.out.println(s.equals(sb)); // false System.out.println(s.contentEquals(sb)); // true
join方法
用途:用特定符號(hào)連接字符串,返回值為字符串
-
方法簽名:
// 第一個(gè)參數(shù)為指定的連接符號(hào)娶吞,其余參數(shù)為待連接字符串 public static String join(CharSequence delimiter, CharSequence... elements)
-
舉例:
String message = String.join("-", "This", "is", "a", "String"); // This-is-a-String List list<String> = Arrays.asList("Steve", "Rick", "Peter", "Abbey"); String names = String.join(" | ", list); // Steve | Rick | Peter | Abbey
split方法
用途:用特定符號(hào)分割字符串垒迂,返回值為字符串?dāng)?shù)組
-
方法簽名:
// 第一個(gè)參數(shù)為正則表達(dá)式 // 第二個(gè)參數(shù)為可選參數(shù),用于指定分割處的子字符串的數(shù)量妒蛇;當(dāng)其為0時(shí)將返回除末尾空字符串外的所有子字符串机断;當(dāng)其為負(fù)數(shù)時(shí)將返回全部子字符串 String[] split(String regex, int limit)
-
舉例:
String s = "bbaaccaa"; Sting arr1[] = s.split("a"); // arr1 = ["bb", "cc", ""] Sting arr2[] = s.split("a", 1); // arr2 = ["bb"] String arr3[]= s.split("a", -1); // arr3 = ["bb", "cc", ""] String arr4[]= s.split("a", 0); // arr4 = ["bb", "cc"]
trim方法
用途:去除字符串首尾的空格,返回值為字符串
-
舉例:
String str = new String(" How are you?? "); System.out.println("String after trim: " + str.trim()); // How are you??
isEmpty方法
用途:判斷字符串是否為空绣夺,返回值為布爾值
-
舉例:
String str1=""; String str2="hello"; System.out.println(str1.isEmpty()); // true System.out.println(str2.isEmpty()); // false