Java中關於String類型的10個問題

本文轉載自 ImportNew,由 ImportNew - strongme 翻譯自 programcreek

原文鏈接: programcreek 譯文鏈接: http://www.importnew.com/12845.html

1. 如何比較兩個字符串?用“=”還是equals

簡單來說,“==”是用來檢測倆引用是不是指向內存中的同一個對象,而equals()方法則檢測的是兩個對象的值是否相等。只要你項檢測倆字符串是不是相等的,你就必須得用equals()方法。

如果你知道“字符串保留(string intern)”的概念那就更好了。

2. 爲什麼安全敏感的字符串信息用char[]會比String對象更好?

String對象是不可變的就意味着直到垃圾回收器過來清掃之前它們都不會發生變化的。用數組的話,就可以很明確的修改它任何位置的字符元素。這樣的話,如密碼等安全敏感的信息就不會出現在系統的任何地方。

3. 字符串對象能否用在switch表達式中?

從JDK7開始的話,我們就可以在switch條件表達式中使用字符串了,也就是說7之前的版本是不可以的。

1
2
3
4
5
6
7
8
9
// java 7 only!
switch (str.toLowerCase()) {
      case "a":
           value = 1;
           break;
      case "b":
           value = 2;
           break;
}

4. 如何將字符串轉換爲整型數值?

1
int n = Integer.parseInt("10");

如此簡單,經常使用有偶爾也會被遺忘。

5. 如何用空格去分隔字符串?

我們可以很便捷的使用正則表達式來進行分隔。“\s”就表示空格,還有如”",”\t”,”\r”,”\n”.

1
String[] strArray = aString.split("\\s+");

6. substring()方法具體是都幹了些啥?

在JDK6中,這個方法只會在標識現有字符串的字符數組上 給一個窗口來表示結果字符串,但是不會創建一個新的字符串對象。如果需要創建個新字符串對象,可以這樣在結果後面+一個空的字符串:

1
str.substring(m, n) + ""

這麼寫的話就會創建一個新的字符數組來表示結果字符串。同時,這麼寫也有一定的機率讓你的代碼跑的更快,因爲垃圾回收器會吧沒有在使用的大字符串回收而留下子字符串。

Oracle JDK7中的substring()方法會創建一個新的字符數組,而不用之前存在的。看看這張圖就會明白substring()方法在JDK6和JDK7中的區別。

7. String&StringBuilder&StringBuffer

String vs StringBuilder:StringBuilder是可變的,這就意味你在創建對象之後還可以去修改它的值。StringBuilder vs StringBuffer:StringBuffer是同步的,意味着它是線程安全的,但是就會比StringBuilder慢些。

8. 如何快速重複構造一段字符串?

在Python編程中,只需要用字符串去乘以一個數字就可以 搞定了,那在Java編程中,我們可以使用來自Apache Commons Lang包中的StringUtils類的repeat()方法。

1
2
3
String str = "abcd";
String repeated = StringUtils.repeat(str,3);
//abcdabcdabcd

9. 如何將時間格式的字符串轉換成date對象?

1
2
3
4
String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
//Tue Sep 17 00:00:00 EDT 2013

10. 如何計數一個字符在某個字符串中出現的次數?

使用Apache Commons Lang包中的 StringUtils類就可以完成這個工作。

1
2
int n = StringUtils.countMatches("11112222", "1");
System.out.printl```  n(n);


發佈了10 篇原創文章 · 獲贊 2 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章