原文戳這里: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ù)組。上面的代碼,有時會讓你的代碼運(yùn)行更快,因?yàn)槔厥掌鲿占療o用的大字符串,并僅僅保留子字符串。
在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()方法來實(shí)現(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);