[JAVA][String常用方法]

1.落筆緣由

字符串在程序中使用得太頻繁了穆刻,而java.lang.String中包含著許多有用的方法新锈,但是由于平時(shí)沒(méi)詳細(xì)去看過(guò)String的源碼梆暮,所以有些邏輯String已經(jīng)提供處理的方法了资溃,而由于對(duì)String的生疏大莫,于是又重復(fù)造輪子勿侯,做了許多無(wú)謂的功夫拓瞪。
總的來(lái)說(shuō),String常用的方法大概有幾類:
(1)將其他基本類型轉(zhuǎn)換為String
(2)將String轉(zhuǎn)換為char數(shù)組
(3)將字符串所以英文轉(zhuǎn)為大寫(xiě)字母或小寫(xiě)字母
(4)獲取指定的子字符串在字符串中出現(xiàn)的位置(返回的是首位置)
(5)返回該字符串指定位置的字符
(6)根據(jù)給定正則表達(dá)式的匹配拆分字符串
(7)替換字符
(8)連接字符
(9)比較字符串是否相等(compareTo和equal)
(10)去除字符串首位的空格(trim)

2.實(shí)踐檢驗(yàn)

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class Test1 extends Activity
{
    private final static String TAG = "lgy";
    private String beseStr = "lgy哈嘍";
    private int i = 111;
    private float f = 222f;
    private long l = 333333333;
    private double d = 444F;
    private short s = 555;
    private byte b  = 0010;
    private char c = 'c';
    private boolean bl = true;
    
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test1);
//      typeToString();
//      stringToType();
//      stringConcat("_ok");
        stringCompareTo("lgy哈嘍","lgy哈嘍", 0);
        stringCompareTo("lgy哈嘍","lgy哈", 0);//返回多出的字符個(gè)數(shù) 3
        stringCompareTo("lgy哈","lgy哈嘍", 0);//返回少了的字符個(gè)數(shù) -3
        stringCompareTo("lgd","lgy哈嘍", 0);//d 100 y 121 
        stringCompareTo("lgy哈嘍","LGY哈嘍", 1);
//      stringEndWith("l");
//      stringEndWith("嘍");
//      stringStartWith("l");
//      stringToCharArrays(beseStr);
//      stringSplit("lgy_123_rtt", "_");
//      stringIndexOf("lgy_123_ktv_456","k");
//      stringCharAt("abcdefg",5);
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 基本類型轉(zhuǎn)String
     */
    private void typeToString()
    {
        //Java中數(shù)值常量的默認(rèn)類型都是int類型的助琐,當(dāng)進(jìn)行賦值操作的時(shí)候祭埂,如果像這個(gè)一樣,賦值給byte類型的數(shù)據(jù)兵钮,
        //這是系統(tǒng)內(nèi)部會(huì)先判斷這個(gè)數(shù)據(jù)是否超過(guò)byte類型的最大范圍(-128~127)蛆橡,如果沒(méi)有超過(guò)則可以正常賦值,超過(guò)了會(huì)報(bào)錯(cuò)
        //如果賦的值前面沒(méi)有0,轉(zhuǎn)String的值對(duì)應(yīng)的是十進(jìn)制的數(shù)值
        //如果賦的值前面有0(如b = 0111)掘譬,轉(zhuǎn)String的值貌似是對(duì)不上的,因?yàn)檫@個(gè)0111被系統(tǒng)認(rèn)為是8進(jìn)制轉(zhuǎn)為10進(jìn)制就是73
        //0100 轉(zhuǎn)String 64
        //0001         1
        //0010         8
        //0110         72
        //0111         73
        //反正把byte這個(gè)基本類型當(dāng)作10進(jìn)制泰演,但是值限定在-127~127來(lái)使用即可
        //總結(jié):
        //1.數(shù)值前面帶0的表示的是這個(gè)數(shù)值是8進(jìn)制的
        //2.數(shù)值前面帶0x的標(biāo)識(shí)這個(gè)數(shù)值是16進(jìn)制的
        
        Log.i(TAG, "byte:"+String.valueOf(b));
        Log.i(TAG, "short:"+String.valueOf(s));
        Log.i(TAG, "int:"+String.valueOf(i));
        Log.i(TAG, "long:"+String.valueOf(l));
        
        Log.i(TAG, "float:"+String.valueOf(f));
        Log.i(TAG, "double:"+String.valueOf(d));
        
        Log.i(TAG, "char:"+String.valueOf(c));
        
        Log.i(TAG, "boolean:"+String.valueOf(bl));
        //結(jié)果:
//      01-16 11:46:30.427: I/lgy(23893): byte:8
//      01-16 11:46:30.427: I/lgy(23893): short:555
//      01-16 11:46:30.427: I/lgy(23893): int:111
//      01-16 11:46:30.427: I/lgy(23893): long:333333333
//      01-16 11:46:30.427: I/lgy(23893): float:222.0
//      01-16 11:46:30.427: I/lgy(23893): double:444.0
//      01-16 11:46:30.427: I/lgy(23893): char:c
//      01-16 11:46:30.427: I/lgy(23893): boolean:true
    }
    
    private void stringToType()
    {
        Log.i(TAG, "stringToType================================");
        //1.string to int
        //parseInt(String string, int radix)的radix參數(shù)是進(jìn)制數(shù),這個(gè)方法可以將數(shù)值字符串轉(zhuǎn)為對(duì)應(yīng)radix進(jìn)制數(shù)的數(shù)值的10進(jìn)制數(shù)
        //例如Integer.parseInt("100",2)=4葱轩,它將字符串“100”當(dāng)作2進(jìn)制數(shù)睦焕,換算成10進(jìn)制就是4
        //Integer.parseInt("100",8)=64
        //Integer.parseInt("100",16)=256
        //Integer.parseInt("100",4)=16
        //反正最后的返回值是10進(jìn)制數(shù)
        Log.i(TAG, "int:"+Integer.parseInt("g",17));
        //不帶radix參數(shù)的默認(rèn)是把string當(dāng)作10進(jìn)制數(shù)來(lái)轉(zhuǎn)換
        Log.i(TAG, "int:"+Integer.parseInt("100"));
        //除非radix>16,否則無(wú)法解析字母(不區(qū)分大小寫(xiě))
        //例如Integer.parseInt("a")或Integer.parseInt("a",10)都是會(huì)報(bào)錯(cuò)的
        //因?yàn)?6進(jìn)制的10到15是用A到F表示的藐握,所以Integer.parseInt("a",16)=10是能解析的
        //但是如果Integer.parseInt("g",16)是會(huì)報(bào)錯(cuò)的,因?yàn)?6進(jìn)制中沒(méi)有用到g
        //然而如果你將radix設(shè)置為17垃喊,也就是17進(jìn)制猾普,即Integer.parseInt("g",17),是能解析的Integer.parseInt("g",17)=16
        Log.i(TAG, "int:"+Integer.parseInt("+100"));
        //能識(shí)別‘-’和‘+’號(hào)
        //看了源碼radix必須大于等于2本谜,小于等于36
        
        //2.string to float
        Log.i(TAG, "float:"+Float.parseFloat("100"));
        //Float.parseFloat("100")==100.0
        //Float無(wú)法設(shè)置進(jìn)制初家,只有parseFloat(String string)這個(gè)解析方法
        Log.i(TAG, "float:"+Float.parseFloat("100.01"));
        
        //3.string to double
        Log.i(TAG, "double:"+Double.parseDouble("100"));
        //Double.parseDouble("100")==100.0
        //Double無(wú)法設(shè)置進(jìn)制,只有parseDouble(String string)這個(gè)解析方法
        
        //4.string to char ---no char本來(lái)就表示字符乌助,轉(zhuǎn)為字符串有什么意義
        
        //5.string to boolean 
        Log.i(TAG, "boolean:"+Boolean.parseBoolean("true"));
        //Boolean.parseBoolean("true")=true
        Log.i(TAG, "boolean:"+Boolean.parseBoolean("trues"));
        //Boolean.parseBoolean("trues")=false
        Log.i(TAG, "boolean:"+Boolean.parseBoolean("tru"));
        //Boolean.parseBoolean("tru")=false
        Log.i(TAG, "boolean:"+Boolean.parseBoolean("1"));
        //Boolean.parseBoolean("1")=false
        //感覺(jué)有點(diǎn)sb,我應(yīng)該去看parseBoolean源碼的笤成,代碼是return "true".equalsIgnoreCase(s)
        //也就是只要字符串不是“true”或“TRUE”,就返回false
        
        //6.string to byte
        Log.i(TAG, "byte:"+Byte.parseByte("11"));
        //看源碼它調(diào)用了Integer.parseInt("11",10);它的用法和parseInt一樣,只是它的數(shù)值限制在-127到127眷茁,超出這個(gè)范圍就報(bào)異常
        
        //7.string to short
        Log.i(TAG, "short:"+Short.parseShort("11"));
        //看源碼它調(diào)用了Integer.parseInt("11",10);它的用法和parseInt一樣炕泳,只是它的數(shù)值限制在-256到256,超出這個(gè)范圍就報(bào)異常
        
        //8.string to long
        Log.i(TAG, "long:"+Long.parseLong("11"));
        //它沒(méi)調(diào)用Integer.parseInt上祈,但是用法應(yīng)該也一樣培遵,只是他的數(shù)值范圍比較大
    }
    
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 連接兩個(gè)字符串,將指定的str加到beseStr字符串的結(jié)尾
     * @param str
     */
    private void stringConcat(String str)
    {
        Log.i(TAG, beseStr.concat(str));
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO  這個(gè)函數(shù)的作用就是對(duì)兩個(gè)字符串按字典排序的方式進(jìn)行比較登刺,返回兩個(gè)字符串中第一個(gè)不同的字符的ascII碼差值
     *      如stringCompareTo("lgd","lgy哈嘍", 0);//d 100 y 121 返回的是-21
     *      但是stringCompareTo("lg","lgy哈嘍", 0);這樣子會(huì)返回-3籽腕,也就是返回少了的字符的個(gè)數(shù)
     *compareTo:If the strings are the same length and every {@code char} is the same, the result is 0
     *compareToIgnoreCase:不區(qū)分大小寫(xiě),If the strings are the same length and every {@code char} is the same, the result is 0
     * @param string
     * @param m
     */
    private void stringCompareTo(String str ,String string ,int m)
    {
        if (m==0)
        {
            Log.i(TAG, "return value:"+str.compareTo(string));
        }else if (m==1)
        {
            Log.i(TAG, "return value:"+str.compareToIgnoreCase(string));
        }

    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 此字符串是否以指定的后綴結(jié)束
     */
    private void stringEndWith(String suffix)
    {
        Log.i(TAG, "return value:"+beseStr.endsWith(suffix));
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 測(cè)試此字符串是否以指定的前綴開(kāi)始
     * @param prefix
     */
    private void stringStartWith(String prefix)
    {
        Log.i(TAG, "return value:"+beseStr.startsWith(prefix));
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 將此字符串轉(zhuǎn)換為一個(gè)新的字符數(shù)組
     * @param string
     */
    private void stringToCharArrays(String string)
    {
        char[] cs = string.toCharArray();
        for (int i = 0; i < cs.length; i++)
        {
            Log.i(TAG, "i:"+cs[i]);
        }
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 根據(jù)給定正則表達(dá)式的匹配拆分此字符串
     * @param string
     */
    private void stringSplit(String beSplitString,String regularExpression)
    {
        String str[] = beSplitString.split(regularExpression);
        for (int i = 0; i < str.length; i++)
        {
            Log.i(TAG, "i:"+str[i]);
        }
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 返回指定子字符串在此字符串中第一次出現(xiàn)處的索引(首位置)
     * @param beIndexString
     * @param string
     */
    private void stringIndexOf(String beIndexString,String string)
    {
        int index = beIndexString.indexOf(string);
        Log.i(TAG, "index:"+index);
    }
    
    /**
     * Administrator
     * 2017-1-16
     *TODO 返回指定索引處的字符,別忘了纸俭,索引從0開(kāi)始
     * @param string
     * @param index
     */
    private void stringCharAt(String string,int index)
    {
        Log.i(TAG, "char:"+string.charAt(index));
    }
}

3. compareTo的用途

compareTo這個(gè)方法確實(shí)不常用皇耗,但是覺(jué)得他挺有意思的,想仔細(xì)了解它的用途揍很。在上面例子中也說(shuō)明了:

這個(gè)函數(shù)的作用就是對(duì)兩個(gè)字符串按字典排序的方式進(jìn)行比較郎楼,返回兩個(gè)字符串中第一個(gè)不同的字符的ascII碼差值
如stringCompareTo("lgd","lgy哈嘍", 0);//d 100 y 121 返回的是-21
但是stringCompareTo("lg","lgy哈嘍", 0);這樣子會(huì)返回-3,也就是返回少了的字符的個(gè)數(shù)
stringCompareTo("lgy哈嘍","lg", 0);這樣子會(huì)返回3窒悔,也就是返回多出的字符個(gè)數(shù)

但是還是不是很清楚compareTo有很用呜袁,雖然知道它的作用,但是具體用途還是不清楚简珠,要它何用阶界?還是通過(guò)現(xiàn)實(shí)例子來(lái)展示它的作用:

//使用compareTo 進(jìn)行姓名的排序
//需要進(jìn)行排序的字符串  
String[] array = new String[] { "lilei", "libai", "james", "poly",  
                "wobfei" };  
//使用簡(jiǎn)單的循環(huán)排序  
        for (int i = 0; i < array.length - 1; i++) {  
            for (int j = i + 1; j < array.length; j++) {  
                if (array[i].compareTo(array[j]) > 0) {  
                    String temp = array[i];  
                    array[i] = array[j];  
                    array[j] = temp;  
                }  
            }  
        } 
//結(jié)果:
//james  libai  lilei  poly  wobfei

4.總結(jié)

這里只是列舉一下比較常用的,如果想深入了解還是要看源碼聋庵,可以比較深入的了解這些方法的實(shí)現(xiàn)過(guò)程和具體的使用限制膘融。

5.源碼地址

http://download.csdn.net/detail/lgywsdy/9741104

6.參考文章

http://wobfei.iteye.com/blog/743123

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祭玉,隨后出現(xiàn)的幾起案子氧映,更是在濱河造成了極大的恐慌,老刑警劉巖攘宙,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯耸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蹭劈,警方通過(guò)查閱死者的電腦和手機(jī)疗绣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铺韧,“玉大人多矮,你說(shuō)我怎么就攤上這事」颍” “怎么了塔逃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)料仗。 經(jīng)常有香客問(wèn)我湾盗,道長(zhǎng),這世上最難降的妖魔是什么立轧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任格粪,我火速辦了婚禮,結(jié)果婚禮上氛改,老公的妹妹穿的比我還像新娘帐萎。我一直安慰自己,他們只是感情好胜卤,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布疆导。 她就那樣靜靜地躺著,像睡著了一般葛躏。 火紅的嫁衣襯著肌膚如雪澈段。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天舰攒,我揣著相機(jī)與錄音均蜜,去河邊找鬼。 笑死芒率,一個(gè)胖子當(dāng)著我的面吹牛囤耳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偶芍,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼充择,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了匪蟀?” 一聲冷哼從身側(cè)響起椎麦,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎材彪,沒(méi)想到半個(gè)月后观挎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體琴儿,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年嘁捷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了造成。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雄嚣,死狀恐怖晒屎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缓升,我是刑警寧澤鼓鲁,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站港谊,受9級(jí)特大地震影響骇吭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歧寺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一绵跷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧成福,春花似錦碾局、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蕴潦,卻和暖如春像啼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潭苞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工忽冻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人此疹。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓僧诚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蝗碎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湖笨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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

  • 1.落筆緣由 之前只是粗略的記錄了String的一下常用方法,所以去看了jdk文檔蹦骑,在這次希望能補(bǔ)全String常...
    lgy_gg閱讀 320評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法慈省,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法眠菇,繼承相關(guān)的語(yǔ)法边败,異常的語(yǔ)法袱衷,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,664評(píng)論 18 399
  • 來(lái)源:http://itssh.cn/post/896.html String類中常用方法: 來(lái)源:http://...
    圓夢(mèng)人生閱讀 409評(píng)論 0 2
  • 在編寫(xiě)程序的過(guò)程中,不了避免的要用到字符串笑窜,所以String類的常用方法的用法是必須掌握的致燥。學(xué)習(xí)一個(gè)類的使用方法最...
    Geg_Wuz閱讀 1,270評(píng)論 0 4
  • 先說(shuō)說(shuō)我對(duì)于創(chuàng)業(yè)的看法匾寝,創(chuàng)業(yè)說(shuō)白了就是賣貨,如果不是銷售高手荷腊,很難在短時(shí)間內(nèi)賣出更多的貨艳悔。很多人跳過(guò)銷售,直接跑去...
    跑腿僧閱讀 303評(píng)論 0 0