最近用JAVA語(yǔ)言刷PAT 和leetcode上的算法題目,其間遇到了很多問(wèn)題,有些在我們做項(xiàng)目時(shí)不容易被發(fā)現(xiàn),但是在刷算法題目時(shí),一些bug往往出自其中且不易發(fā)現(xiàn)。選擇不當(dāng)時(shí)會(huì)很大程度上影響算法的時(shí)間復(fù)雜度。故而想總結(jié)一類這樣的篇目,以便于對(duì)日后的算法、代碼設(shè)計(jì)不斷優(yōu)化提高。
我們先從一些基本的談起:
String 轉(zhuǎn)char
1.將單個(gè)字符由char轉(zhuǎn)為String:
String s="acv";
char c=s.charAt(index);//此處index為你想轉(zhuǎn)的單個(gè)字符在字符串 s 中的下標(biāo)
2.將整個(gè)字符串轉(zhuǎn)為字符數(shù)組char [ ]:
String s="acv";
char c[ ]=s.toCharArray();
char轉(zhuǎn)為String
1.單個(gè)字符的轉(zhuǎn)換
法一:String s=String.valueOf('c');
法二:String s=Character.toString('c');
法三:String s="" 'c';
2.多個(gè)字符一次性轉(zhuǎn)為String字符串
如目前有一個(gè)字符數(shù)組 char c[ ]={'a', 'c', 'v'};
法一:String s=new String( c );
法二:String s=String.valueOf ( c );
int (或int [ ])和String的互轉(zhuǎn)
這里可以把int類型看作char 類型,和上述 char和String 的轉(zhuǎn)換一樣
java語(yǔ)言中沒(méi)有這個(gè)方法,但我們可以這樣操作:
1、String 中next() 查找并返回來(lái)自此掃描器的下一個(gè)完整標(biāo)記, 獲取一個(gè)字符串
在讀取內(nèi)容時(shí),會(huì)過(guò)濾掉有效字符前面的無(wú)效字符,對(duì)輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結(jié)束符,next()方法會(huì)自動(dòng)將其過(guò)濾掉。只有在讀取到有效字符之后,next()方法才將其后的空格鍵、Tab鍵或Enter鍵等視為結(jié)束符。所以next()方法不能得到帶空格的字符串。next()獲取第一個(gè)空格前數(shù)據(jù)。next()見(jiàn)到回車也會(huì)結(jié)束。
2.nextLine() 此掃描器執(zhí)行當(dāng)前行,并返回跳過(guò)的輸入信息,獲取一行數(shù),見(jiàn)到回車就結(jié)束,可獲得包含空格在內(nèi)的字符。
它的結(jié)束符只能是Enter鍵,即nextLine()方法返回的是Enter鍵之前沒(méi)有被讀取的所有字符,它是可以得到帶空格的字符串的。
3.兩者使用順序不一樣時(shí)會(huì)產(chǎn)生不同的效果:
(1)next() 在nextLine之前:
案例一:
在輸入了 123后,我又輸入了空格和56,因此,k是12,s 是空格和56
案例二:
在輸入了123后,打了回車,這時(shí)會(huì)發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象:還為來(lái)得及輸入(即執(zhí)行第13行代碼:輸入一行字符串),便已經(jīng)打印出了結(jié)果。
其實(shí)是因?yàn)榇颂幍腟tring 類 s 獲取了123后面的回車符,并且因?yàn)閚extLine()見(jiàn)到回車結(jié)束,所以產(chǎn)生了以上的結(jié)果。
為解決這個(gè)問(wèn)題,我們可以這樣做:
只需在next()類的方法后加上一個(gè):String s=sc.nextLine(); 將回車符消耗掉,如下:
(2)nextLine () 在前,next() 類在后是不會(huì)出現(xiàn)上述問(wèn)題的
(3)nextLine() 和 nextLine() 之間不會(huì)出現(xiàn)上述問(wèn)題
1.轉(zhuǎn)int
String s="123";
int n=Integer.parseInt(s);
2.轉(zhuǎn)float
String s="1.23";
float n=Float.parseFloat(s);
3.轉(zhuǎn)double
double n=Double.parseDouble(s);
當(dāng)對(duì)字符串進(jìn)行修改時(shí),需要使用StringBuilder 和StringBuffer類。
這兩個(gè)類和String 不同之處在于,它們能夠被多次修改。
1.StringBuilder 類非線程安全,不可同步訪問(wèn)。但有速度又是,所以如果不考慮線程安全問(wèn)題,建議用StringBuilder
2.StringBuffer是線程安全的,但相對(duì)較慢。
3.StringBuilder 中常用方法:
(1)append(String s)或 append(char c) //進(jìn)行字符串的連接
(2)toString() //返回一個(gè)與構(gòu)建器或者緩沖器內(nèi)容相同的字符串
聯(lián)系客服