Zi 字媒體
2017-07-25T20:27:27+00:00
String類:String類即字元串類型,並不是Java的基本數據類型,但可以像基本數據類型一樣使用,用雙引號括起來進行聲明。在Java中用String類的構造方法來創建字元串變數。聲明字元串:聲明一個字元串就是創建一個字元串對象。//可以聲明單個也可以同時聲明多個字元串對象,聲明不賦值,這個對象就是空, 也就是 String a= null; String a;創建字元串:給字元串賦值就是創建字元串的過程。1.給字元串賦值的四種方法:(1).引用字元串常量String a="hi"; String b="hello",c="world"; String d; d="hello world";(2).利用構造方法直接實例化// 1. String a=new String("hello ");// 2.String b=new String(a);(3).利用字元數組實例化char charArr={'t','i','m','e'};(4).利用位元組數組實例化2.把任何類型轉換為字元串:valueOf 方法System.out.println(String.valueOf(6)); //將6轉換為字元串3.連接字元串+//使用 + 號拼接String a="123"+456;String b=a+"hello";//使用 += 拼接b+="您好";System.out.println(b);4.獲取字元串的長度:length 方法String a="123 456 789";//獲取a的長度(包括空格)賦值給sint s=a.length;System.out.println(s);5.獲取指定索引位置的字元:char 方法String str = " a new world a new start ";System.out.println(str.charAt(3));// 取出字元串中制定索引位置的字元6.判斷一個字元串是否包含另一個字元:contains 方法String str = " a new world a new start ";System.out.println(str.contains("abc"));// 判斷一個字元串是否包含另一個字元串7.獲取指定位置的字元 返回索引:indexOf 獲取指定位置的字元四種方法:String str="we are the world";System.out.println(str.indexOf("e"));System.out.println(str.indexOf("e",2));//索引2之後e出現的索引System.out.println(str.lastIndexOf("e"));System.out.println(str.lastIndexOf("e",8));//索引8之前出現的e8.截取字元串:String id="123456199410207890";//獲取第十五位索引到最後的數字String e4=id.substring(15);//獲取第六位到十四位索引,即生日String bir=id.substring(6,14);9.判斷字元串是否相等:需要特別注意的是,如果定義兩個字元串再用 == 去判斷它們是否相等,那麼他們的結果一定是false。這是因為這兩個字元串的值都會保存在內存的堆棧中,首先我們創建 name 和 dbValue 兩個引用,然後用 new 方法在堆中創建了 String 的對象實體,並讓兩個引用指向各自的對象實體,然後兩個對象實體又會分別在棧中創建字面值內容。name 和 dbValue 始終指向的是兩個獨立的內存區域,而 == 判斷的是內存地址,所以用 == 判斷字元串結果一定false,這和他們保存的什麼樣的字面值沒有任何關係。判斷字元串相等要使用 equales方法:equales方法比較的是兩個字元串的內容equalsIgnoreCase 方法: 忽略大小寫的比較方法特殊情況:如果創建的字元串不是用 new 方法創建的,而是直接用引用字元串常量。結果會有不同。我們讓 name 創建引用字元串常量 tom 的時候,Java虛擬機首先會在棧中創建 tom 然後會自動創建一個匿名的字元串對象指向 tom ,最後將匿名字元串對象的地址交給 name 引用。然後再當我們讓 dbValue也引用常量 tom 的時候, Java虛擬機會先到棧的常量區中尋找是否有相同的常量,發現有相同的常量,就直接將這個常量的匿名對象交給了dbValue引用。這時 name 和 dbValue 指向的就是同一個匿名對象,這樣他們 == 返回的結果就是 true。常量池:String 直接引用創建字元串的時候,Java會從常量池中找這個「tom」,如果找到了,他會將找到的這個直接給他,如果找不到則新建如下:10. 判斷字元串的開始和結尾:endsWith 方法和 startsWith方法11.字元串替換12.去除首尾空格和去除所有空白:trim方法replaceAll("\\s","") 方法13.大小寫轉換toUpperCase 方法toLowerCase 方法14.字元串分割.split需要注意的是不能用 「.」 進行分割,因為支持正則表達式,所以要用時應使用轉義字元,如 「.」 應使用 「\\.」15.查找字元串indexOf 方法16.格式化字元串format方法http://tool.oschina.net/apidocs/apidoc?api=jdk-zh 格式化字元在線API文檔Date tim=new Date;String str=String.format("%tF", tim);System.out.println(tim);System.out.println(str);//格式化為年System.out.println(str.format("%tY",tim));//格式化為月System.out.println(str.format("%tB",tim));//格式化為日System.out.println(str.format("%td",tim));System.out.println(String.format("字母a: %c",'a'));System.out.println(String.format("123+456= %d",123+456));System.out.println(String.format("保留三位小數 %.3f",3.141592652545));System.out.println(String.format("判斷2<3 %b",2<3));System.out.println(String.format("科學計數法 %e",12000000.1));System.out.println(String.format("天才是%d%%的汗水和%d%%的靈感",1,99));//要注意在 這種方法中要輸出%號需要寫兩個%%StringBuffer類是線程安全的可變字元序列。一個類似於String的字元串緩衝區。String創建的字元串對象是不可修改的,StringBuff類創建的是可修改的字元串序列,且實體容量會隨著存放的字元串增加而自動增加。StringBuilder類即字元串生成器,新創建的StringBuilder對象初始容量是16個字元,可以自行指定初始長度,也可以動態地執行添加、刪除和插入等字元串的編輯操作,大大提高了頻繁增加字元串的效率。如果附加的字元超過可容納的長度,則StringBuilder對象將自動增加長度以容納被附加的字元。三者的關係:在執行速度方面的比較:StringBuilder > StringBuffer > String三者之間相互轉換:三者之間的不同之處:String只能賦值1次,每一次改變內容都生成了一個新的對象,然後原有的對象引用了新的對象,所以說String本身是不可改變,每一次改變String的內容,都會在內存創建新的對象,而每一次生成新對象都會對系統性能產生影響,這會降低Java虛擬機的工作效率。如下圖所示:而StringBuilder和StringBuffer不同,每次操作都是對自身對象的操作,而不是生成新的對象,其所佔空間會隨著字幅內容增加而增加,做大量修改操作時,不會因生成大量匿名對象而影響系統性能。如下圖所示:StringBuffer類:作用:String雖然提供了很多API方法,但是始終是對字元串常量進行操作,不僅無法改變常量的值,還會佔用大量內存空間。StringBuffer類則是一個非常靈活的工具,節約內存空間的同時還保障了線程安全。創建://創建一個StringBuilder類對象必須用new方法,不能像String對象那樣直接引用字元串常量常用操作:追加字元串:append 方法StringBuffer sbf =new StringBuffer("誰將");sbf.append("新樽"); //追加字元串StringBuffer s1=new StringBuffer("辭舊月");sbf.append(s1); //追加新的字元串中的內容int a=2333;sbf.append(a); //追加int型變數aSystem.out.println(sbf);修改指定索引處的字元:setChar 方法StringBuffer sbf=new StringBuffer("誰將新樽辭舊月");sbf.setCharAt(6,'日'); //替換索引6的字元System.out.println(sbf);字元串的反序:reverse 方法StringBuffer sbf=new StringBuffer("誰將新樽辭舊月");sbf.reverse;System.out.println(sbf);刪除子字元串:delete 方法StringBuffer sbf=new StringBuffer("誰將新樽辭舊月");sbf.delete(4,6);System.out.println(sbf);其他常用方法:StringBuffer sbf=new StringBuffer("誰將新樽辭舊月");System.out.println(sbf.length); //獲取字元串序列長度System.out.println(sbf.charAt(5)); //獲取索引為5的內容System.out.println(sbf.indexOf("DEF")); //獲取DEF所在的索引位置,沒有返回 -1System.out.println(sbf.substring(0,2)); //獲取索引0-2的內容System.out.println(sbf.replace(2,5,"wode")); //將索引2-5的內容替換StringBuilder類和StringBuffer類具有兼容的API,所以兩者使用方法也相同StringBuilder sbd=new StringBuilder;sbd.append("我是StringBuilder"); //追加字元sbd.length; //長度sbd=sbd.insert(5,"///"); //插入sbd=sbd.delete(sbd.length-1,sbd.length ); //刪除最後一個字元sbd=sbd.reverse; //反序String字元串練習整理:public class Test2 {public static void main(String args){String str="像勇士這樣的球隊,只有防守一鬆懈,他們才能抓住機會,打完了三場,爵士還是沒找到應對勇士的辦法";//1, 寫代碼找出關鍵字"球隊","機會"所在字元串str的索引位置, 找出字元串中第二個"勇士"的位置, 並輸出在控制台上System.out.println(str.indexOf("球隊"));System.out.println(str.indexOf("機會"));System.out.println(str.indexOf("勇士",2));//2, 定義int型變數m, 取值為第一題中所有索引值的和int m=str.indexOf("球隊")+str.indexOf("機會")+str.indexOf("勇士",2);System.out.println(m);//3, 在控制台上輸出m作為char型時顯示的內容System.out.println((char)m);//4, 寫代碼實現將str字元串用","分割成數組, 並輸出索引值為4的值String strs= str.split(",");System.out.println(strs[4]);//5, 寫代碼實現將str字元串中"爵士"用"勇士"代替, "勇士"用"爵士"代替,並將結果輸出到控制台上(禁用replace方法)String strg= str.split("");for(int g=0;g<strg.length;g++){if(strg[g].equals("爵")){strg[g]="勇";}else if(strg[g].equals("勇")){strg[g]="爵";}System.out.print(strg[g]);}System.out.println;//6, 編寫代碼從str字元串中取一部分在控制台上列印這樣一句話: 勇士抓住機會,找到應對辦法int a1= str.indexOf("勇士");int a2= str.indexOf("抓住機會");int a3= str.indexOf(",");int a4= str.indexOf("找到應對");int a5= str.indexOf("辦法");System.out.println(str.substring(a1,a1+2)+str.substring(a2,a2+4)+str.substring(a3,a3+1)+str.substring(a4,a4+4)+str.substring(a5,a5+2));//7, 寫一段代碼, 可以取出任意qq郵箱地址中的qq號碼String qe="931375261@qq.com";String str1=qe.split("@");System.out.println(str1[0]);//8, 使用for和if列印一個空心正方形for(int i=0;i<10;i++){System.out.print('*');}System.out.println;for(int i=0;i<=3;i++){System.out.print("* *");System.out.println;}for(int i=0;i<10;i++){System.out.print('*');}System.out.println;int M, N;int h, j;M=N=6;for(h=0;h<M;++h){if(h==0||h==M-1){for(j=0;j<N;++j){System.out.print("* ");}}else{System.out.print("* ");for(j=0;j<N-2;++j){System.out.print(" ");}System.out.print("* ");}System.out.println("");}//9, 使用for循環列印一個菱形int lineCount = 9;// 輸出的菱形有多少行,請賦值成奇數int maxLineNum = (lineCount + 1) / 2;// 菱形最多一行for (int i = 1; i <= maxLineNum; i++) {// 循環菱形數量越來越多的幾行for (int space = 1; space <= maxLineNum - i; space++) {// 輸出空格,數量=最後一行-當前行數System.out.print(" ");}for (int star = 1; star <= (i * 2) - 1; star++) {// 輸出星號,數量=行數*2-1System.out.print("*");}System.out.println;// 換行}int declineCount = lineCount - maxLineNum;// 計算剩下的幾行,這幾行星號的數量是遞減的for (int i = 1; i <= declineCount; i++) {// 循環菱形數量越來越少的行數for (int space = 1; space <= i; space++) {// 輸出空格,數量等於當前的行數System.out.print(" ");}for (int star = 1; star <= (declineCount - i + 1) * 2 - 1; star++) {// 輸出星號,數量等於(總數-當前行數)*2-1System.out.print("*");}System.out.println;}//10, 使用for循環列印一個空心菱形(選做題)*/int max=9;int mid=(max+1)/2;for(int v=1;v<=mid;v++){// 輸出空格,數量=最後一行-當前行數for(int sp=1;sp<=mid-v;sp++){System.out.print(" ");}// 輸出星號,數量=行數*2-1for(int sp=1;sp<=(v*2)-1;sp++){if(sp==1){System.out.print("*");}else if(sp==(v*2-1)){System.out.print("*");}else{System.out.print(" ");}}System.out.println;}int end=max-mid;// 循環菱形數量越來越少的行數for(int f=1;f<=end;f++){for(int sp=1;sp<=f;sp++){System.out.print(" ");}for(int st= 1;st<=(end-f+1)*2-1;st++){if(st==1){System.out.print("*");}else if(st==(end-f+1)*2-1){System.out.print("*");}else{System.out.print(" ");}}System.out.println;}}}更多IT乾貨,歡迎關注微信:ujiuyesx或者加入山西優就業QQ交流群:285240034 更多優質內容推薦:有錢任性,某公司豪擲500萬幫助20左右年輕人找工作,起因是做善良的人:http://www.ujiuye.com/zt/qgsqxly/?wt.mc_id=17009334
寫了
5860316篇文章,獲得
23313次喜歡