原文戳這里:Top 10 questions of Java Strings
以下是10個最常見的java字符串問題缠局。
1. 如何比較字符串?用"=="還是用equals()?
簡單的說珊搀,"=="
用來測試是否引用了同一個字符串對象。equals()
用來測試字符串值是否相等。除非你想要檢測兩個字符串是否是相同的對象福稳,否則你應(yīng)該總是使用equals()
残拐。
2. 對于安全敏感類的信息途茫,為什么char[]優(yōu)于String?
字符串是不可變的溪食,這意味著一旦它們被創(chuàng)建囊卜,它們將保持不變,直到垃圾收集器清理為止错沃。對于數(shù)組栅组,你可以明確的修改它的元素。這樣一來枢析,安全性敏感信息(比如密碼)將不會出現(xiàn)在系統(tǒng)的任何地方玉掸。
3. 是否可以在switch語句中使用String
java7及以后是可以的。從JDK7開始醒叁,我們可以使用string
作為switch
的條件司浪,在JDK6之前,我們不能使用string
作為switch
語句的條件辐益。
// java 7 only!
switch (str.toLowerCase()) {
case "a":
value = 1;
break;
case "b":
value = 2;
break;
}
4.如何把string轉(zhuǎn)成int断傲?
int n = Integer.parseInt("10");
簡單,但是使用很頻繁還容易忘記智政。
5.如何用空白符分割字符串认罩?
String[] strArray = aString.split("\\s+");
6.substring()方法究竟做了什么?
在 JDK6中续捂,substring()
方法給出了一個表示現(xiàn)有String的字符數(shù)組的窗口垦垂,而不是創(chuàng)建一個新字符串。為了創(chuàng)建一個由新char數(shù)組表示的新字符串牙瓢,你可以添加一個空字符串劫拗,代碼如下所示:
str.substring(m, n) + ""
這將創(chuàng)建一個表示新字符串的新的char數(shù)組。上面的代碼矾克,有時會讓你的代碼運行更快页慷,因為垃圾回收器會收集無用的大字符串,并僅僅保留子字符串。
在Oracle JDK 7中酒繁,substring()
會創(chuàng)建一個新的char數(shù)組滓彰,而不是使用現(xiàn)有的char數(shù)組。想了解substirng()
在JDK6跟JDK7之間的差異州袒,請戳這篇文章substring() difference between JDK 6 and JDK 7.
7. String vs StringBuilder vs StringBuffer
String
vs StringBuilder
: StringBuilder是可變的揭绑,這意味著它創(chuàng)建之后仍可以修改。
StringBuilder
vs StringBuffer
: StringBuffer是同步的郎哭,這意味著它是線性安全的他匪,但是比StringBuilder更慢。
8.如何重復(fù)一個字符串夸研?
在Python里邦蜜,我們可以乘以一個數(shù)字來重復(fù)一個字符串。在Java中陈惰,我們可以使用StringUtils
中的repeat()
方法來實現(xiàn)畦徘。StringUtils
來自 Apache Commons Lang package.
import org.apache.commons.lang3.StringUtils;
String str = "abcd";
String repeated = StringUtils.repeat(str,3);
9.如何把字符串轉(zhuǎn)換為日期?
try {
String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
}catch (Exception e){
}
10.如何去統(tǒng)計一個字符在字符串中出現(xiàn)的次數(shù)抬闯?
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);