Java中String類(字符串操作)的10個罕見成績息爭決辦法。本站提示廣大學習愛好者:(Java中String類(字符串操作)的10個罕見成績息爭決辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中String類(字符串操作)的10個罕見成績息爭決辦法正文
本文引見Java中關於String最多見的10個成績:
1. 字符串比擬,應用 "==" 照樣 equals() ?
簡略來講, "==" 斷定兩個援用的是否是統一個內存地址(統一個物理對象).
而 equals 斷定兩個字符串的值能否相等.
除非你想斷定兩個string援用能否統一個對象,不然應當老是應用 equals()辦法.
假如你懂得 字符串的駐留 ( String Interning ) 則會更好地輿解這個成績
2. 關於敏感信息,為什麼應用char[]要比String更好?
String是弗成變對象, 意思是一旦創立,那末全部對象就弗成轉變. 即便老手認為String援用變了,現實上只是(指針)援用指向了另外一個(新的)對象.
而法式員可以明白地對字符數組停止修正,是以敏感信息(如暗碼)不輕易在其他處所裸露(只需你用完後對char[]置0).
3. 在switch語句中應用String作為case前提?
從 JDK7 開端,這是可以的,煩瑣一句,Java 6 及之前的版本都不支撐如許做.
// 只在java 7及更高版本有用!
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
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中substring()辦法及其差別
7. String vs StringBuilder vs StringBuffer
StringBuilder 是可變的,是以可以在創立今後修正外部的值.
StringBuffer 是同步的,是以是線程平安的,但效力絕對更低.
8. 若何反復拼接統一字符串?
計劃1: 應用Apache Commons Lang 庫的 StringUtils 對象類.
String str = "abcd";
String repeated = StringUtils.repeat(str,3);//abcdabcdabcd
計劃2:
應用 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);