search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

Java之字元串String,StringBuffer,StringBuilder-太原IT培訓

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之前出現的e

8.截取字元串:

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型變數a

System.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所在的索引位置,沒有返回 -1

System.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="[email protected]";

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-1

System.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-1

System.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-1

for(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



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦