String類

String類

1识补、String對象的初始化

由于String對象特別常用,所以在對String對象進行初始化時辫红,Java提供了一種簡化的特殊語法凭涂,格式如下:

String s = “abc”;

s = “Java語言”;

其實按照面向?qū)ο蟮臉?biāo)準(zhǔn)語法,其格式應(yīng)該為:

String s = new String(“abc”);

s = new String(“Java語言”);

只是按照面向?qū)ο蟮臉?biāo)準(zhǔn)語法贴妻,在內(nèi)存使用上存在比較大的浪費切油。例如String s = new String(“abc”);實際上創(chuàng)建了兩個String對象,一個是”abc”對象名惩,存儲在常量空間中澎胡,一個是使用new關(guān)鍵字為對象s申請的空間。

其它的構(gòu)造方法的參數(shù)娩鹉,可以參看String類的API文檔攻谁。

2、字符串的常見操作

a弯予、charAt方法

該方法的作用是按照索引值(規(guī)定字符串中第一個字符的索引值是0戚宦,第二個字符的索引值是1,依次類推)锈嫩,獲得字符串中的指定字符受楼。例如:

String s = “abc”;

char c = s.chatAt(1);

則變量c的值是’b’。

b祠挫、compareTo方法

該方法的作用是比較兩個字符串的大小那槽,比較的原理是依次比較每個字符的字符編碼。首先比較兩個字符串的第一個字符等舔,如果第一個字符串的字符編碼大于第二個的字符串的字符編碼骚灸,則返回大于0的值,如果小于則返回小于0的值慌植,如果相等則比較后續(xù)的字符甚牲,如果兩個字符串中的字符編碼完全相同則返回0。

例如:

String s = “abc”;

String s1 = “abd”;

int value = s.compareTo(s1);

則value的值是小于0的值蝶柿,即-1丈钙。

在String類中還存在一個類似的方法compareToIgnoreCase,這個方法是忽略字符的大小寫進行比較交汤,比較的規(guī)則和compareTo一樣雏赦。例如:

String s = “aBc”;

String s1 = “ABC”;

int value = s. compareToIgnoreCase (s1);

則value的值是0劫笙,即兩個字符串相等。

c星岗、concat方法

該方法的作用是進行字符串的連接填大,將兩個字符串連接以后形成一個新的字符串。例如:

String s = “abc”;

String s1 = “def”;

String s2 = s.concat(s1);

則連接以后生成的新字符串s2的值是”abcdef”俏橘,而字符串s和s1的值不發(fā)生改變允华。如果需要連接多個字符串,可以使用如下方法:

String s = “abc”;

String s1 = “def”;

String s2 = “1234”;

String s3 = s.concat(s1).concat(s2);

則生成的新字符串s3的值為”abcdef1234”寥掐。

其實在實際使用時靴寂,語法上提供了一種更簡單的形式,就是使用“+”進行字符串的連接召耘。例如:

String s = “abc” + “1234”;

則字符串s的值是”abc1234”百炬,這樣書寫更加簡單直觀。

而且使用“+”進行連接污它,不僅可以連接字符串收壕,也可以連接其他類型。但是要求進行連接時至少有一個參與連接的內(nèi)容是字符串類型轨蛤。而且“+”匹配的順序是從左向右,如果兩邊連接的內(nèi)容都是基本數(shù)字類型則按照加法運算虫埂,如果參與連接的內(nèi)容有一個是字符串才按照字符串進行連接祥山。

例如:

int a = 10;

String s = “123” + a + 5;

則連接以后字符串s的值是“123105”,計算的過程為首先連接字符串”123”和變量a的值掉伏,生成字符串”12310”缝呕,然后使用該字符串再和數(shù)字5進行連接生成最終的結(jié)果。

而如下代碼:

int a = 10;

String s = a + 5 + “123”;

則連接以后字符串s的值是”15123”斧散,計算的過程為首先計算a和數(shù)字5供常,由于都是數(shù)字型則進行加法運算或者數(shù)字值15,然后再使用數(shù)字值15和字符串”123”進行連接獲得最終的結(jié)果鸡捐。

而下面的連接代碼是錯誤的:

int a = 12;

String s = a + 5 + ‘s’;

因為參與連接的沒有一個字符串栈暇,則計算出來的結(jié)果是數(shù)字值,在賦值時無法將一個數(shù)字值賦值給字符串s箍镜。

d源祈、endsWith方法

該方法的作用是判斷字符串是否以某個字符串結(jié)尾,如果以對應(yīng)的字符串結(jié)尾色迂,則返回true香缺。

例如:

String s = “student.doc”;

boolean b = s.endsWith(“doc”);

則變量b的值是true。

e歇僧、equals方法

該方法的作用是判斷兩個字符串對象的內(nèi)容是否相同图张。如果相同則返回true,否則返回false。例如:

String s = “abc”;

String s1 = new String(“abc”);

boolean b = s.equals(s1);

而使用“==”比較的是兩個對象在內(nèi)存中存儲的地址是否一樣祸轮。例如上面的代碼中兽埃,如果判斷:

boolean b = (s == s1);

則變量b的值是false,因為s對象對應(yīng)的地址是”abc”的地址倔撞,而s1使用new關(guān)鍵字申請新的內(nèi)存讲仰,所以內(nèi)存地址和s的”abc”的地址不一樣,所以獲得的值是false痪蝇。

在String類中存在一個類似的方法equalsIgnoreCase鄙陡,該方法的作用是忽略大小寫比較兩個字符串的內(nèi)容是否相同。例如:

String s = “abc”;

String s1 =”ABC”;

boolean b = s. equalsIgnoreCase (s1);

則變量b的值是true躏啰。

f趁矾、getBytes方法

該方法的作用是將字符串轉(zhuǎn)換為對應(yīng)的byte數(shù)組,從而便于數(shù)據(jù)的存儲和傳輸给僵。例如:

String s = “計算機”;

byte[] b = s.getBytes();?? //使用本機默認的字符串轉(zhuǎn)換為byte數(shù)組

byte[] b = s.getBytes(“gb2312”); //使用gb2312字符集轉(zhuǎn)換為byte數(shù)組

在實際轉(zhuǎn)換時毫捣,一定要注意字符集的問題,否則中文在轉(zhuǎn)換時將會出現(xiàn)問題帝际。

g蔓同、indexOf方法

該方法的作用是查找特定字符或字符串在當(dāng)前字符串中的起始位置,如果不存在則返回-1蹲诀。例如:

String s = “abcded”;

int index = s.indexOf(‘d’);

int index1 = s.indexOf(‘h’);

則返回字符d在字符串s中第一次出現(xiàn)的位置斑粱,數(shù)值為3。由于字符h在字符串s中不存在脯爪,則index1的值是-1则北。

當(dāng)然,也可以從特定位置以后查找對應(yīng)的字符痕慢,例如:

int index = s.indexOf(‘d’,4);

則查找字符串s中從索引值4(包括4)以后的字符中第一個出現(xiàn)的字符d尚揣,則index的值是5。

由于indexOf是重載的掖举,也可以查找特定字符串在當(dāng)前字符串中出現(xiàn)的起始位置快骗,使用方式和查找字符的方式一樣。

另外一個類似的方法是lastIndexOf方法塔次,其作用是從字符串的末尾開始向前查找第一次出現(xiàn)的規(guī)定的字符或字符串滨巴,例如:

String s = “abcded”;

int index = s. lastIndexOf(‘d’);

則index的值是5。

h俺叭、length方法

該方法的作用是返回字符串的長度恭取,也就是返回字符串中字符的個數(shù)。中文字符也是一個字符熄守。例如:

String s = “abc”;

String s1 = “Java語言”;

int len = s.length();

int len1 = s1.length();

則變量len的值是3蜈垮,變量len1的值是6耗跛。

i、replace方法

該方法的作用是替換字符串中所有指定的字符攒发,然后生成一個新的字符串调塌。經(jīng)過該方法調(diào)用以后,原來的字符串不發(fā)生改變惠猿。例如:

String s = “abcat”;

String s1 = s.replace(‘a(chǎn)’,’1’);

該代碼的作用是將字符串s中所有的字符a替換成字符1羔砾,生成的新字符串s1的值是”1bc1t”,而字符串s的內(nèi)容不發(fā)生改變偶妖。

如果需要將字符串中某個指定的字符串替換為其它字符串姜凄,則可以使用replaceAll方法,例如:

String s = “abatbac”;

String s1 = s.replaceAll(“ba”,”12”);

該代碼的作用是將字符串s中所有的字符串”ab”替換為”12”趾访,生成新的字符串”a12t12c”态秧,而字符串s的內(nèi)容也不發(fā)生改變。

如果只需要替換第一個出現(xiàn)的指定字符串時扼鞋,可以使用replaceFirst方法申鱼,例如:

String s = “abatbac”;

String s1 = s. replaceFirst (“ba”,”12”);

該代碼的作用是只將字符串s中第一次出現(xiàn)的字符串”ab”替換為字符串”12”,則字符串s1的值是”a12tbac”云头,字符串s的內(nèi)容也不發(fā)生改變捐友。

j、split方法

該方法的作用是以特定的字符串作為間隔溃槐,拆分當(dāng)前字符串的內(nèi)容楚殿,一般拆分以后會獲得一個字符串?dāng)?shù)組。例如:

String s = “ab,12,df”;

String s1[] = s.split(“,”);

該代碼的作用是以字符串”,”作為間隔竿痰,拆分字符串s,從而得到拆分以后的字符串?dāng)?shù)字s1砌溺,其內(nèi)容為:{“ab”,”12”,”df”}影涉。

該方法是解析字符串的基礎(chǔ)方法。

如果字符串中在內(nèi)部存在和間隔字符串相同的內(nèi)容時將拆除空字符串规伐,尾部的空字符串會被忽略掉蟹倾。例如:

String s = “abbcbtbb”;

String s1[] = s.split(“b”);

則拆分出的結(jié)果字符串?dāng)?shù)組s1的內(nèi)容為:{“a”,””,”c”,”t”}。拆分出的中間的空字符串的數(shù)量等于中間間隔字符串的數(shù)量減一個猖闪。例如:

String s = “abbbcbtbbb”;

String s1[] = s.split(“b”);

則拆分出的結(jié)果是:{“a”,””,””,”c”,”t”}鲜棠。最后的空字符串不論有多少個,都會被忽略培慌。

如果需要限定拆分以后的字符串?dāng)?shù)量豁陆,則可以使用另外一個split方法,例如:

String s = “abcbtb1”;

String s1[] = s.split(“b”,2);

該代碼的作用是將字符串s最多拆分成包含2個字符串?dāng)?shù)組吵护。則結(jié)果為:{“a”,”cbtb1”}盒音。

如果第二個參數(shù)為負數(shù)表鳍,則拆分出盡可能多的字符串,包括尾部的空字符串也將被保留祥诽。

k譬圣、startsWith方法

該方法的作用和endsWith方法類似,只是該方法是判斷字符串是否以某個字符串作為開始雄坪。例如:

String s = “TestGame”;

boolean b = s.startsWith(“Test”);

則變量b的值是true厘熟。

l、substring方法

該方法的作用是取字符串中的“子串”维哈,所謂“子串”即字符串中的一部分绳姨。例如“23”是字符串“123”的子串。

字符串“123”的子串一共有6個:”1”笨农、”2”就缆、”3”、”12”谒亦、”23”竭宰、”123”。而”32”不是字符串”123”的子串份招。

例如:

String s = “Test”;

String s1 = s.substring(2);

則該代碼的作用是取字符串s中索引值為2(包括)以后的所有字符作為子串切揭,則字符串s1的值是”st”。

如果數(shù)字的值和字符串的長度相同锁摔,則返回空字符串廓旬。例如:

String s = “Test”;

String s1 = s.substring(4);

則字符串s1的值是””。

如果需要取字符串內(nèi)部的一部分谐腰,則可以使用帶2個參數(shù)的substring方法孕豹,例如:

String s = “TestString”;

String s1 = s.substring(2,5);

則該代碼的作用是取字符串s中從索引值2(包括)開始,到索引值5(不包括)的部分作為子串十气,則字符串s1的值是”stS”励背。

下面是一個簡單的應(yīng)用代碼,該代碼的作用是輸出任意一個字符串的所有子串砸西。代碼如下:

String s = “子串示例”;

int len = s.length();?//獲得字符串長度

for(int begin = 0;begin < len – 1;begin++){?//起始索引值

for(int end = begin + 1;end <= len;end++){?//結(jié)束索引值

System.out.println(s.substring(begin,end));

}

}

在該代碼中叶眉,循環(huán)變量begin代表需要獲得的子串的起始索引值,其變化的區(qū)間從第一個字符的索引值0到倒數(shù)第二個字符串的索引值len -2芹枷,而end代表需要獲得的子串的結(jié)束索引值衅疙,其變化的區(qū)間從起始索引值的后續(xù)一個到字符串長度。通過循環(huán)的嵌套鸳慈,可以遍歷字符串中的所有子串饱溢。

m、toCharArray方法

該方法的作用和getBytes方法類似走芋,即將字符串轉(zhuǎn)換為對應(yīng)的char數(shù)組理朋。例如:

String s = “abc”;

char[] c = s.toCharArray();

則字符數(shù)組c的值為:{‘a(chǎn)’,’b’,’c’}絮识。

n、toLowerCase方法

該方法的作用是將字符串中所有大寫字符都轉(zhuǎn)換為小寫嗽上。例如:

String s = “AbC123”;

String s1 = s.toLowerCase();

則字符串s1的值是”abc123”次舌,而字符串s的值不變。

類似的方法是toUpperCase兽愤,該方法的作用是將字符串中的小寫字符轉(zhuǎn)換為對應(yīng)的大寫字符彼念。例如:

String s = “AbC123”;

String s1 = s. toUpperCase ();

則字符串s1的值是”ABC123”,而字符串s的值也不變浅萧。

o逐沙、trim方法

該方法的作用是去掉字符串開始和結(jié)尾的所有空格,然后形成一個新的字符串洼畅。該方法不去掉字符串中間的空格吩案。例如:

String s = “?? abc?abc?123?“;

String s1 = s.trim();

則字符串s1的值為:” abc?abc?123”。字符串s的值不變帝簇。

p徘郭、valueOf方法

該方法的作用是將其它類型的數(shù)據(jù)轉(zhuǎn)換為字符串類型。需要注意的是丧肴,基本數(shù)據(jù)和字符串對象之間不能使用以前的強制類型轉(zhuǎn)換的語法進行轉(zhuǎn)換残揉。

另外,由于該方法是static方法芋浮,所以不用創(chuàng)建String類型的對象即可抱环。例如:

int n = 10;

String s = String.valueOf(n);

則字符串s的值是”10”。雖然對于程序員來說纸巷,沒有發(fā)生什么變化镇草,但是對于程序來說,數(shù)據(jù)的類型卻發(fā)生了變化瘤旨。

介紹一個簡單的應(yīng)用梯啤,判斷一個自然數(shù)是幾位數(shù)字的邏輯代碼如下:

int n = 12345;

String s = String.valueOf(n);

int len = s.length();

則這里字符串的長度len,就代表該自然數(shù)的位數(shù)裆站。這種判斷比數(shù)學(xué)判斷方法在邏輯上要簡單一些。

關(guān)于String類的使用就介紹這么多黔夭,其它的方法以及這里到的方法的詳細聲明可以參看對應(yīng)的API文檔宏胯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市本姥,隨后出現(xiàn)的幾起案子肩袍,更是在濱河造成了極大的恐慌,老刑警劉巖婚惫,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氛赐,死亡現(xiàn)場離奇詭異魂爪,居然都是意外死亡,警方通過查閱死者的電腦和手機艰管,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門滓侍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牲芋,你說我怎么就攤上這事撩笆。” “怎么了缸浦?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵夕冲,是天一觀的道長。 經(jīng)常有香客問我裂逐,道長歹鱼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任卜高,我火速辦了婚禮弥姻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篙悯。我一直安慰自己蚁阳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布鸽照。 她就那樣靜靜地躺著螺捐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矮燎。 梳的紋絲不亂的頭發(fā)上定血,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音诞外,去河邊找鬼澜沟。 笑死,一個胖子當(dāng)著我的面吹牛峡谊,可吹牛的內(nèi)容都是我干的茫虽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼既们,長吁一口氣:“原來是場噩夢啊……” “哼濒析!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啥纸,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤号杏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后斯棒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盾致,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡主经,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了庭惜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罩驻。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜈块,靈堂內(nèi)的尸體忽然破棺而出鉴腻,到底是詐尸還是另有隱情,我是刑警寧澤百揭,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布爽哎,位于F島的核電站,受9級特大地震影響器一,放射性物質(zhì)發(fā)生泄漏课锌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一祈秕、第九天 我趴在偏房一處隱蔽的房頂上張望渺贤。 院中可真熱鬧,春花似錦请毛、人聲如沸志鞍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽固棚。三九已至,卻和暖如春仙蚜,著一層夾襖步出監(jiān)牢的瞬間此洲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工委粉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呜师,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓贾节,卻偏偏與公主長得像汁汗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栗涂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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