java中String類(lèi)的常用方法總結(jié)

一、compareTo

  1. 當(dāng)兩個(gè)比較的字符串相等時(shí)

1.1 兩個(gè)字符相等,則返回0

 String a = "abc"; 
 String b = "abc";
 System.out.println(a.compareTo(b)); // 0 
  1. 當(dāng)兩個(gè)比較的字符串是英文且長(zhǎng)度不等時(shí)

2.1 長(zhǎng)度短的與長(zhǎng)度長(zhǎng)的前面的字符一樣,則返回的結(jié)果是兩個(gè)長(zhǎng)度相減的值

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 長(zhǎng)度不一樣且前幾個(gè)字符也不一樣,從第一位開(kāi)始找,當(dāng)找到不一樣的字符時(shí),則返回的值是這兩個(gè)字符比較的值

String a = "acsdf";
String b = "add";
System.out.println(a.compareTo(b)); // -1
  1. 當(dāng)兩個(gè)比較的字符串是英文且長(zhǎng)度相等時(shí)

3.1 一個(gè)字符,則返回的值是這兩個(gè)字符比較的值

String a = "a";   // 97
String b = "b";   // 98
System.out.println(a.compareTo(b)); // -1

3.2 多個(gè)字符,第一個(gè)字符相同則直接比較第二個(gè)字符,以此類(lèi)推

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內(nèi)部維護(hù)的一個(gè)字符數(shù)組,用來(lái)存儲(chǔ)String的值
  • 首先判斷需要拼接的字符串是否長(zhǎng)度為0,若為0則返回預(yù)原字符串
String a = "i am ";
String result = a.concat("");
System.out.println(result); // i am 
  • 使用Arrays.copyOf方法將value復(fù)制到buf,且buf長(zhǎng)度擴(kuò)充為原字符串和新字符串長(zhǎng)度之和
  • 使用String的getChars方法將str的字符全部復(fù)制到buf索引len(即原字符串之后),完成拼接
  • 返回新的字符串
String a = "i am ";
String result = a.concat("zach");
System.out.println(result); // i am zach

三、equals

equals 方法既然是基類(lèi) Object 的方法,我們創(chuàng)建的所有的對(duì)象都擁有這個(gè)方法,并有權(quán)利去重寫(xiě)這個(gè)方法。該方法返回一個(gè) boolean 值,代表比較的兩個(gè)對(duì)象是否相同,這里的相同的條件由重寫(xiě) equals 方法的類(lèi)來(lái)解決。

String str1 = "abc";
String str2 = "abc";
str1.equals(str2);//true

顯然 String 類(lèi)一定重寫(xiě)了 equals 方法否則兩個(gè) String 對(duì)象內(nèi)存地址肯定不同。


 public boolean equals(Object anObject) {
   //首先判斷兩個(gè)對(duì)象的內(nèi)存地址是否相同
   if (this == anObject) {
       return true;
   }
   // 判斷連個(gè)對(duì)象是否屬于同一類(lèi)型。
   if (anObject instanceof String) {
       String anotherString = (String)anObject;
       int n = value.length;
       //長(zhǎng)度相同的情況下逐一比較 char 數(shù)組中的每個(gè)元素是否相同
       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中,我們?cè)贘ava字符串類(lèi)中有一個(gè)新的方法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()方法通過(guò)分隔符連接列表的元素。

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
  1. split(String regex):它根據(jù)分隔正則表達(dá)式將輸入字符串拆分后返回字符串?dāng)?shù)組。
  2. split(String regex, int limit):當(dāng)我們想要限制子字符串時(shí),使用這個(gè)Java字符串分割方法。這個(gè)方法和上面的方法的唯一區(qū)別是它限制了分割后返回的字符串的數(shù)量。例如split("any delimiter", 3)將返回只有3個(gè)字符串的數(shù)組,即使分隔符在字符串中出現(xiàn)超過(guò)3次。
  3. 如果限制是負(fù)的,那么返回的數(shù)組將有盡可能多的子字符串,但是當(dāng)限制是零,那么返回的數(shù)組將有所有的子字符串,不包括尾部的空字符串。
  4. 如果指定的正則表達(dá)式的語(yǔ)法無(wú)效,則拋出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);
    }
}

輸出結(jié)果:

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和負(fù)限制之間的差異:
    在上面的例子中,split(" / ",0)和split(" / ",-5)返回相同的值,但是在某些情況下結(jié)果會(huì)不同。讓我們通過(guò)一個(gè)例子來(lái)看看這兩者的區(qū)別:
String s="bbaaccaa";
String arr1[]= s.split("a", -1);
String arr2[]= s.split("a", 0);

輸出結(jié)果:

{"bb","","cc","",""}
{"bb","","cc"}

  • 用多個(gè)分隔符(特殊字符)分隔Java字符串:
    讓我們看看在使用split()方法時(shí)如何傳遞多個(gè)分隔符。在本例中,我們將根據(jù)多個(gè)特殊字符分割輸入字符串。
   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]);
        }
   }

輸出結(jié)果:

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

它從輸入字符串中刪除前導(dǎo)和尾空格后返回一個(gè)字符串。如。" 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());
   }
}

輸出結(jié)果:

String before trim: (空格) (空格)(空格)(空格) How are you??(空格)(空格)(空格)(空格)
String after trim: How are you??

isEmpty

方法的作用是:檢查字符串是否為空。如果給定字符串為空,此方法返回true,否則返回false。換句話(huà)說(shuō),如果字符串的長(zhǎng)度為0,你可以說(shuō)這個(gè)方法返回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());  
   }
}

正如我們?cè)谏厦娴氖纠锌吹降模琲sEmpty()方法只檢查字符串是否為空。如果您希望檢查字符串是null還是都為空,那么可以按照下面的示例進(jìn)行檢查。

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);
        }
   }
}

輸出結(jié)果:

String str1 is empty or null
beginnersbook

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容