java中String類的常用方法總結

一朽缴、compareTo

  1. 當兩個比較的字符串相等時

1.1 兩個字符相等,則返回0

 String a = "abc"; 
 String b = "abc";
 System.out.println(a.compareTo(b)); // 0 
  1. 當兩個比較的字符串是英文且長度不等時

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
  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
  1. split(String regex):它根據(jù)分隔正則表達式將輸入字符串拆分后返回字符串數(shù)組晋辆。
  2. split(String regex, int limit):當我們想要限制子字符串時渠脉,使用這個Java字符串分割方法。這個方法和上面的方法的唯一區(qū)別是它限制了分割后返回的字符串的數(shù)量瓶佳。例如split("any delimiter"芋膘, 3)將返回只有3個字符串的數(shù)組,即使分隔符在字符串中出現(xiàn)超過3次霸饲。
  3. 如果限制是負的为朋,那么返回的數(shù)組將有盡可能多的子字符串,但是當限制是零厚脉,那么返回的數(shù)組將有所有的子字符串习寸,不包括尾部的空字符串。
  4. 如果指定的正則表達式的語法無效傻工,則拋出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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末皿渗,一起剝皮案震驚了整個濱河市斩芭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乐疆,老刑警劉巖划乖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挤土,居然都是意外死亡琴庵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門仰美,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迷殿,“玉大人,你說我怎么就攤上這事咖杂∏焖拢” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵诉字,是天一觀的道長懦尝。 經常有香客問我,道長壤圃,這世上最難降的妖魔是什么陵霉? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮埃唯,結果婚禮上撩匕,老公的妹妹穿的比我還像新娘。我一直安慰自己墨叛,他們只是感情好止毕,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漠趁,像睡著了一般扁凛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闯传,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天谨朝,我揣著相機與錄音,去河邊找鬼甥绿。 笑死字币,一個胖子當著我的面吹牛,可吹牛的內容都是我干的共缕。 我是一名探鬼主播洗出,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼图谷!你這毒婦竟也來了翩活?” 一聲冷哼從身側響起阱洪,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菠镇,沒想到半個月后冗荸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡利耍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年蚌本,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堂竟。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡魂毁,死狀恐怖,靈堂內的尸體忽然破棺而出出嘹,到底是詐尸還是另有隱情席楚,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布税稼,位于F島的核電站烦秩,受9級特大地震影響,放射性物質發(fā)生泄漏郎仆。R本人自食惡果不足惜只祠,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扰肌。 院中可真熱鬧抛寝,春花似錦、人聲如沸曙旭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桂躏。三九已至钻趋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剂习,已是汗流浹背蛮位。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳞绕,地道東北人失仁。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像们何,于是被迫代替她去往敵國和親萄焦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350