一朽缴、compareTo
- 當兩個比較的字符串相等時
1.1 兩個字符相等,則返回0
String a = "abc";
String b = "abc";
System.out.println(a.compareTo(b)); // 0
- 當兩個比較的字符串是英文且長度不等時
2.1 長度短的與長度長的前面的字符一樣戏溺,則返回的結果是兩個長度相減的值
String a = "abc";
String b = "ab";
System.out.println(a.compareTo(b)); // 1
String c = "h";
String d = "hello";
System.out.println(c.compareTo(d)); // -4
2.2 長度不一樣且前幾個字符也不一樣,從第一位開始找,當找到不一樣的字符時,則返回的值是這兩個字符比較的值
String a = "acsdf";
String b = "add";
System.out.println(a.compareTo(b)); // -1
- 當兩個比較的字符串是英文且長度相等時
3.1 一個字符,則返回的值是這兩個字符比較的值
String a = "a"; // 97
String b = "b"; // 98
System.out.println(a.compareTo(b)); // -1
3.2 多個字符,第一個字符相同則直接比較第二個字符,以此類推
String a = "abc"; // a = 97
String b = "ebc"; // b = 101
System.out.println(a.compareTo(b)); // -4
String c = "bce"; // b = 101
String d = "bca"; // a = 97
System.out.println(c.compareTo(d)); // 4
二谱仪、concat
源碼
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
分析
- value為String內部維護的一個字符數(shù)組,用來存儲String的值
- 首先判斷需要拼接的字符串是否長度為0否彩,若為0則返回預原字符串
String a = "i am ";
String result = a.concat("");
System.out.println(result); // i am
- 使用Arrays.copyOf方法將value復制到buf疯攒,且buf長度擴充為原字符串和新字符串長度之和
- 使用String的getChars方法將str的字符全部復制到buf索引len(即原字符串之后),完成拼接
- 返回新的字符串
String a = "i am ";
String result = a.concat("zach");
System.out.println(result); // i am zach
三列荔、equals
equals 方法既然是基類 Object 的方法敬尺,我們創(chuàng)建的所有的對象都擁有這個方法,并有權利去重寫這個方法贴浙。該方法返回一個 boolean 值砂吞,代表比較的兩個對象是否相同,這里的相同的條件由重寫 equals 方法的類來解決崎溃。
String str1 = "abc";
String str2 = "abc";
str1.equals(str2);//true
顯然 String 類一定重寫了 equals 方法否則兩個 String 對象內存地址肯定不同蜻直。
public boolean equals(Object anObject) {
//首先判斷兩個對象的內存地址是否相同
if (this == anObject) {
return true;
}
// 判斷連個對象是否屬于同一類型。
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
//長度相同的情況下逐一比較 char 數(shù)組中的每個元素是否相同
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;}
四袁串、join
在Java 8中概而,我們在Java字符串類中有一個新的方法join()
。Java String.join()
方法連接給定的字符串并返回連接后的字符串囱修。
public static String join(分隔符, 字符序列... elements)
返回分隔符和字符序列元素連接在一起的字符串赎瑰。
例:
String message = String.join("-", "This", "is", "a", "String");
System.out.println(message); // "This-is-a-String"
// 注意,如果元素為空破镰,則添加“”餐曼。
String message2 = String.join("", "a", "b", "c", "d");
System.out.println(message2); // abcd
例:join()方法通過分隔符連接列表的元素压储。
List<String> list = new ArrayList<String>();
list.add("s1");
list.add("s3");
list.add("s5");
list.add("s7");
System.out.println(String.join("-", list)); // s1-s3-s5-s7
五、其他
split
- split(String regex):它根據(jù)分隔正則表達式將輸入字符串拆分后返回字符串數(shù)組晋辆。
- split(String regex, int limit):當我們想要限制子字符串時渠脉,使用這個Java字符串分割方法。這個方法和上面的方法的唯一區(qū)別是它限制了分割后返回的字符串的數(shù)量瓶佳。例如split("any delimiter"芋膘, 3)將返回只有3個字符串的數(shù)組,即使分隔符在字符串中出現(xiàn)超過3次霸饲。
- 如果限制是負的为朋,那么返回的數(shù)組將有盡可能多的子字符串,但是當限制是零厚脉,那么返回的數(shù)組將有所有的子字符串习寸,不包括尾部的空字符串。
- 如果指定的正則表達式的語法無效傻工,則拋出PatternSyntaxException異常山析。
public static void main(String args[]){
String str = new String("28/12/2013");
System.out.println("split(String regex):");
String array1[]= str.split("/");
for (String temp: array1){
System.out.println(temp);
}
System.out.println("-----------------------------------------------------");
System.out.println("split(String regex, int limit) with limit=2:");
String array2[]= str.split("/", 2);
for (String temp: array2){
System.out.println(temp);
}
System.out.println("-----------------------------------------------------");
System.out.println("split(String regex, int limit) with limit=0:");
String array3[]= str.split("/", 0);
for (String temp: array3){
System.out.println(temp);
}
System.out.println("-----------------------------------------------------");
System.out.println("split(String regex, int limit) with limit=-5:");
String array4[]= str.split("/", -5);
for (String temp: array4){
System.out.println(temp);
}
}
輸出結果:
split(String regex):
28
12
2013
split(String regex, int limit) with limit=2:
28
12/2013
split(String regex, int limit) with limit=0:
28
12
2013
split(String regex, int limit) with limit=-5:
28
12
2013
- 在java字符串分割方法中0和負限制之間的差異:
在上面的例子中令花,split(" / "诬滩,0)和split(" / "雾消,-5)返回相同的值,但是在某些情況下結果會不同泄伪。讓我們通過一個例子來看看這兩者的區(qū)別:
String s="bbaaccaa";
String arr1[]= s.split("a", -1);
String arr2[]= s.split("a", 0);
輸出結果:
{"bb","","cc","",""}
{"bb","","cc"}
- 用多個分隔符(特殊字符)分隔Java字符串:
讓我們看看在使用split()方法時如何傳遞多個分隔符殴蓬。在本例中,我們將根據(jù)多個特殊字符分割輸入字符串蟋滴。
public static void main(String args[]){
String s = " ,ab;gh,bc;pq#kk$bb";
String[] str = s.split("[,;#$]");
//Total how many substrings? The array length
System.out.println("Number of substrings: "+str.length);
for (int i=0; i < str.length; i++) {
System.out.println("Str["+i+"]:"+str[i]);
}
}
輸出結果:
Number of substrings: 7
Str[0]:
Str[1]:ab
Str[2]:gh
Str[3]:bc
Str[4]:pq
Str[5]:kk
Str[6]:bb
trim
它從輸入字符串中刪除前導和尾空格后返回一個字符串染厅。如。" Hello "trim()
將返回字符串"Hello"
津函。
public class JavaExample{
public static void main(String args[]){
String str = new String(" How are you?? ");
System.out.println("String before trim: "+str);
System.out.println("String after trim: "+str.trim());
}
}
輸出結果:
String before trim: (空格) (空格)(空格)(空格) How are you??(空格)(空格)(空格)(空格)
String after trim: How are you??
isEmpty
方法的作用是:檢查字符串是否為空肖粮。如果給定字符串為空,此方法返回true尔苦,否則返回false尿赚。換句話說,如果字符串的長度為0蕉堰,你可以說這個方法返回true。
public class Example{
public static void main(String args[]){
//empty string
String str1="";
//non-empty string
String str2="hello";
//prints true
System.out.println(str1.isEmpty());
//prints false
System.out.println(str2.isEmpty());
}
}
正如我們在上面的示例中看到的悲龟,isEmpty()方法只檢查字符串是否為空屋讶。如果您希望檢查字符串是null還是都為空,那么可以按照下面的示例進行檢查须教。
public class Example{
public static void main(String args[]){
String str1 = null;
String str2 = "beginnersbook";
if(str1 == null || str1.isEmpty()){
System.out.println("String str1 is empty or null");
}
else{
System.out.println(str1);
}
if(str2 == null || str2.isEmpty()){
System.out.println("String str2 is empty or null");
}
else{
System.out.println(str2);
}
}
}
輸出結果:
String str1 is empty or null
beginnersbook