1.字元串比較,使用“==”還是equals()?
"=="判斷兩個引用的是不是同一個記憶體位址(同一個實體對象)。
equals()判斷兩個字元串的值是否相等。
除非你想判斷兩個string引用是否同一個對象,否則應該總是使用equals()方法。
如果你了解字元串的駐留(string interning)則會更好地了解這個問題。
2. 對于敏感資訊,為何使用char[]要比string更好?
string是不可變對象,意思是一旦建立,那麼整個對象就不可以改變,即使新手覺得string引用變了,實際上隻是(指針)引用指向了另一個(新的)對象。
而程式員可以明确地對字元數組進行修改,是以敏感資訊(如密碼)不容易在其他地方暴露(隻要你用完後對char[]置0).
3.在switch語句中使用string作為case條件
// 隻在java 7及更高版本有效!
switch (str.tolowercase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
}
4.轉換string為數字
對于非常大的數字請使用long.代碼如下:
int age = integer.parseint("10");
long id = long.parselong("190"); // 假如值可能很大.
5.如何通過空白符拆分字元串
string的split()方法接收的字元串會被當做正規表達式解析。
"\s"代表空白字元,如空格"",tab制表符"\t",換行"\n",回車"\r".
而編譯器在對源代碼解析時,也會進行一次字面轉碼。是以需要"\\s".
string[] strarray = astring.split("\\s+");
6.substring()方法内部是如何處理的?
在jdk6中,substring()方法還是共用原來的char[]數組,通過偏移和長度構造了一個"新"的string.
想要substring取得一個全新建立的對象,使用如下這種方式:
string sub = str.substring(start, end) + "";
當然java 7中,substring()建立了一個新的char[]數組,而不是共用。想了解更多,請參考:jdk6和jdk7中string的substring()方法及其差異
7.string vs stringbuffer vs stringbuilder
stringbuilder是可變的,是以可以在建立以後修改内部的值。
stringbuffer是同步的,是以是線程安全的,但是效率相對更低。
8.如何重複拼接同一個字元串?
方案一:使用apache commons lang庫的stringutils工具類。
string str = "abcd";
string repeated = stringutils.repeat(str,3);//abcdabcdabcd
方案二:使用stringbuilder構造,更靈活。
string src = "name";
int len = src.length();
int repeat = 5;
stringbuilder builder = new stringbuilder(len * repeat);
for(int i=0; i<repeat; i++){
builder.append(src);
string dst = builder.tostring();
9.如何将string轉換成日期?
simpledateformat format = new simpledateformat("yyyy-mm-dd");
string str = "2013-11-07";
date date = format.parse(str);
system.out.println(format.format(date));//2013-11-07
10.如何統計某個字元出現的次數?
同樣使用apache commons lang 庫stringutils類:
int n = stringutils.countmatches("11112222", "1");
system.out.println(n);
最新内容請見作者的github頁:http://qaseven.github.io/