11字符串

字符串變量是引用數(shù)據(jù)類型,其變量名存儲(chǔ)在內(nèi)存A區(qū)(相對小的區(qū)域),B區(qū)存字符串內(nèi)容(所有引用類型都是如此存儲(chǔ)),A區(qū)字符串地址的內(nèi)容就是B區(qū)對應(yīng)字符串存儲(chǔ)的地址,而像int型數(shù)字就只存在于A區(qū),變量名地址的內(nèi)容就是其數(shù)值,String在java.lang包下(課程上老師講的很多函數(shù)的具體用法可能都沒講全,需要自己課下多看看文檔能怎么用)

如果對一個(gè)字符串變量重新賦值,相當(dāng)于在B區(qū)新開辟一個(gè)區(qū)域,然后將A去字符串變量名的地址存儲(chǔ)內(nèi)容改成新的B區(qū)地址(和python貼標(biāo)簽一樣)

定義字符串變量

String a = "Hello World!";

String b = new String("Tom"); //通過字符串類

"\n”同樣表示換行

System.out.println(a+'\n'+b);//將a,b換行輸出

字符串拼接

字符串和字符串加法沒說的了

不同的內(nèi)容和字符串拼接得到的結(jié)果還是字符串,看下例,注意字符'a'不是按數(shù)值走

String a = "Hello";

String b = a+3+true+'a'+4.12;? ? ? ? ? //Hello3truea4.12

字符串a(chǎn)pi

定義String s = "hello";后相關(guān)字符串對象s的函數(shù)

s.length()獲得字符串長度(別少了括號(hào)會(huì)報(bào)錯(cuò))

s.indexOf(a)獲得字符串a(chǎn)在s的索引,如果a是s的子字符串(s包含a,a可以是一個(gè)或多個(gè)連續(xù)的字符串也可以是字符常量或者滿足字符范圍的ascii碼值的int數(shù))j就返回對應(yīng)的索引(有重復(fù)子串返回第一個(gè)),從開頭0數(shù)起,如果不在,返回-1,注意函數(shù)是駝峰命名,O大寫,函數(shù)還可以輸入字符(或字符對應(yīng)得整數(shù)),查找對應(yīng)字符的索引

s.lastIndexOf(a)同上,但是重復(fù)子串的時(shí)候獲取的是最后一個(gè)

s.charAt(i)獲取s字符串i索引位置的內(nèi)容,超出范圍會(huì)報(bào)錯(cuò)(0到length()-1)

下例實(shí)現(xiàn)逐個(gè)字符輸出b

String b = "abcdefghi";

for(int i=0;i<b.length();i++){

System.out.println(b.charAt(i));

}

s.substring(startindex)獲得字符串從索引到結(jié)束的字符串內(nèi)容(超邊界會(huì)報(bào)錯(cuò))(還有注意函數(shù)不符合駝峰規(guī)則,沒有大寫)

s.substring(startindex,endindex)字符串從startindex到endindex(右側(cè)不包括)之間的內(nèi)容(類似python切片)

s.startsWith(a)判斷字符串s是否以a(a只能使用字符串,不能使用字符和int)開頭,條件滿足返回true否則false,注意拼寫有字母s,如果判斷是以空字符串開頭也返回true

s.endsWith(a)判斷字符串是否以a結(jié)尾,要求和前者一樣

將判斷字符串相等之前先講一下字符串存儲(chǔ),我們?nèi)缦露x字符串

String str = "www.sikiedu.com";

String str2 = "www.sikiedu.com";

String str3 = new String( "www.sikiedu.com");

三種方式創(chuàng)建了字符串,他們print結(jié)果都是一樣的,但是存儲(chǔ)方式有區(qū)別,內(nèi)存中,變量名存儲(chǔ)于棧,引用類等存儲(chǔ)于堆,常量存儲(chǔ)于方法區(qū)的運(yùn)行常量區(qū)內(nèi),我們str定義在棧中,同時(shí)常量區(qū)就有了字符串內(nèi)容的,其地址是089,棧內(nèi)str地址存放的內(nèi)容就是089(字符串地址),同理str2創(chuàng)建,但是因?yàn)槌A恳呀?jīng)存在,不重復(fù)創(chuàng)建常量,只是將st2的地址存放內(nèi)容變成089,而str3是通過引用對象生成,需要在堆區(qū)開辟一個(gè)空間,str3的地址就指向了堆區(qū)的地址,而堆區(qū)進(jìn)一步指向常量區(qū)的常量。如下圖

插圖1

我們使用==判斷字符串時(shí),是判斷其引用內(nèi)容是否相等,如str==str2是看棧區(qū)的存放地址是否相等,因此str==str2為true,str==str3為false

s.equals(a)判斷字符串a(chǎn)和s的內(nèi)容是否相等,這里判斷的是最終引用常量,上面的str.equals(str3)就可以返回true了,注意拼寫不要少了s

s.equalsIgnoreCase(a)比較s和a的字符串內(nèi)容,無視大小寫,返回true,false

s.compareTo(a)比較字符串s和a的每個(gè)字符,相等判斷下一個(gè),如不等,返回ascii碼差值不計(jì)算其他位,全部相等返回0,如果長度不等(即出現(xiàn)要和空字符比較),則返回長度的差值

s.contains(a)字符串s是否包含子串,是否返回true,false,拼寫有s

s.isEmpty()判斷字符串s是否為空字符串,返回true,false

如果定義String s = null;后嘗試調(diào)用isEmpty()就會(huì)報(bào)錯(cuò),我們定義類型變量如果開始不知道明確的值,可以先賦值null,但是null對象是沒有isEmpty()方法的

s.toLowerCase()返回s字符串的字母全部轉(zhuǎn)化為小寫字母的字符串,s本身不變

s.toUpperCase()返回s字符串的字母全部轉(zhuǎn)化為大寫字母的字符串,s本身不變

s.split(a)以a字符串作為分隔,返回的是字符串?dāng)?shù)組

代碼如下圖,中間使用了String []數(shù)組strs接收結(jié)果,數(shù)組我們后邊學(xué),這里先混個(gè)臉熟,這里還有選擇點(diǎn)作為分隔,使用字符串是\\.因?yàn)?是關(guān)鍵符號(hào),java中使用\.存儲(chǔ),而字符串中\(zhòng)也是特殊符號(hào),所以使用\\.,最后使用了for()遍歷數(shù)組strs,這里學(xué)習(xí)下

特殊情況,當(dāng)分隔符位于字符串左邊界時(shí),字符串?dāng)?shù)組第一個(gè)元素為空字符串,而邊界位于右邊時(shí),沒有空字符串

插圖2

s.split(String a,int limit)s字符串以a字符串分割,limit是分割最大次數(shù)限制,即從左側(cè)開始分割,達(dá)到次數(shù)上限時(shí),把最后一個(gè)分割連同字符串剩下的所有內(nèi)容一起送給數(shù)組最后一個(gè)元素,下圖運(yùn)行分別輸出a和b.c.d

插圖3

s.trim()函數(shù)返回s字符串首尾的多個(gè)空格刪除(類比于python的strip)的字符串,不影響原來的字符串

s.replace(old,new)返回一個(gè)新字符串,其把原來每個(gè)old內(nèi)容替換成new,其中old,new內(nèi)容必須一致,可以都是字符串,也可以都是字符,但不能一個(gè)是字符一個(gè)是字符串

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

相關(guān)閱讀更多精彩內(nèi)容

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