Java中的String類(lèi)的常用方法

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
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吏奸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陶耍,更是在濱河造成了極大的恐慌奋蔚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烈钞,死亡現(xiàn)場(chǎng)離奇詭異泊碑,居然都是意外死亡产上,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)蛾狗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晋涣,“玉大人,你說(shuō)我怎么就攤上這事沉桌⌒蝗担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵留凭,是天一觀的道長(zhǎng)佃扼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蔼夜,這世上最難降的妖魔是什么兼耀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮求冷,結(jié)果婚禮上瘤运,老公的妹妹穿的比我還像新娘。我一直安慰自己匠题,他們只是感情好拯坟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著韭山,像睡著了一般郁季。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钱磅,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天梦裂,我揣著相機(jī)與錄音,去河邊找鬼盖淡。 笑死年柠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禁舷。 我是一名探鬼主播彪杉,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牵咙!你這毒婦竟也來(lái)了派近?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤洁桌,失蹤者是張志新(化名)和其女友劉穎渴丸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谱轨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年戒幔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土童。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诗茎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出献汗,到底是詐尸還是另有隱情敢订,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布罢吃,位于F島的核電站楚午,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尿招。R本人自食惡果不足惜矾柜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望就谜。 院中可真熱鬧怪蔑,春花似錦、人聲如沸吁伺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)量九。三九已至兔综,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窟却,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工呻逆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夸赫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓咖城,卻偏偏與公主長(zhǎng)得像茬腿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宜雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書(shū)筆記切平,整理的知識(shí)點(diǎn),也是為了防止忘記辐董,尊重勞動(dòng)成果悴品,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 831評(píng)論 1 6
  • 在編寫(xiě)程序的過(guò)程中苔严,不了避免的要用到字符串定枷,所以String類(lèi)的常用方法的用法是必須掌握的。學(xué)習(xí)一個(gè)類(lèi)的使用方法最...
    Geg_Wuz閱讀 1,264評(píng)論 0 4
  • 前言 最先接觸編程的知識(shí)是在大學(xué)里面,大學(xué)里面學(xué)了一些基礎(chǔ)的知識(shí)退子,c語(yǔ)言贱迟,java語(yǔ)言,單片機(jī)的匯編語(yǔ)言等絮供;大學(xué)畢...
    oceanfive閱讀 3,077評(píng)論 0 7
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子衣吠,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一...
    阿里高級(jí)軟件架構(gòu)師閱讀 3,286評(píng)論 0 19
  • 盼著壤靶、念著缚俏、望著的暑假終于開(kāi)始了。我卻因家里有事贮乳,忙碌忧换、奔波、勞累了整整一個(gè)月向拆。 是因?yàn)橐粋€(gè)月來(lái)精神高度緊張嗎亚茬?暑...
    聽(tīng)雪zhi閱讀 479評(píng)論 0 0