Java中關於String型別的10個問題
1. 如何比較兩個字串?用“=”還是equals
簡單來說,“==”是用來檢測倆引用是不是指向記憶體中的同一個物件,而equals()方法則檢測的是兩個物件的值是否相等。只要你想檢測倆字串是不是相等的,你就必須得用equals()方法。
如果你知道“字串保留(string intern)”的概念那就更好了。
2. 為什麼安全敏感的字串資訊用char[]會比String物件更好?
String物件是不可變的就意味著直到垃圾回收器過來清掃之前它們都不會發生變化的。用陣列的話,就可以很明確的修改它任何位置的字元元素。這樣的話,如密碼等安全敏感的資訊就不會出現在系統的任何地方。
3. 字串物件能否用在switch表示式中?
從JDK7開始的話,我們就可以在switch條件表示式中使用字串了,也就是說7之前的版本是不可以的。
// java 7 only! switch (str.toLowerCase()) { case "a": value = 1; break; case "b": value = 2; break; }
4. 如何將字串轉換為整型數值?
int n = Integer.parseInt("10");
如此簡單,經常使用有偶爾也會被遺忘。
5. 如何用空格去分隔字串?
我們可以很便捷的使用正規表示式來進行分隔。“\s”就表示空格,還有如””,”\t”,”\r”,”\n”.
String[] strArray = aString.split("\\s+");
6. substring()方法具體是都幹了些啥?
在JDK6中,這個方法只會在標識現有字串的字元陣列上 給一個視窗來表示結果字串,但是不會建立一個新的字串物件。如果需要建立個新字串物件,可以這樣在結果後面+一個空的字串:
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()方法。
String str = "abcd"; String repeated = StringUtils.repeat(str,3); //abcdabcdabcd
9. 如何將時間格式的字串轉換成date物件?
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類就可以完成這個工作。
int n = StringUtils.countMatches("11112222", "1"); System.out.printl``` n(n);
相關文章
- 好程式設計師Java教程分享Java中String型別的10個問題程式設計師Java型別
- JAVA型別的問題Java型別
- [原創]關於Java String物件建立問題解惑Java物件
- 關於資料庫中的型別和entity bean裡面的型別對應問題資料庫型別Bean
- 一個關於Java Excel的問題JavaExcel
- 關於java的byte 和char 以及String等問題Java
- 全面解析Java中的String資料型別Java資料型別
- 關於 iOS 10 中 ATS 的問題iOS
- 關於int型別數值的運算問題型別
- String型別函式傳遞問題型別函式
- java中關於Map的九大問題Java
- 關於Ibatis 轉換 oracle date型別的問題BATOracle型別
- 關於iOS10中ATS的問題iOS
- Java泛型型別擦除問題Java泛型型別
- 關於java中String字元轉碼的幾個小測試Java字元
- 請教一個關於JAVA SOCKET程式設計中的問題Java程式設計
- 一個關於java.net.URL的問題.Java
- 一個關於Linq對引用型別元素集合去重問題的思考型別
- [BUG反饋]關於ot模型中的時間型別欄位bug問題模型型別
- java中文問題和資料庫型別有關Java資料庫型別
- 關於Application型別的變數一些問題。APP型別變數
- 關於Linux的10個最常見問題Linux
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- 關於技術選型的問題
- Java中關於二分查詢的問題Java
- Java中String和byte型別互相轉換Java型別
- 關於 Go 中 Map 型別和 Slice 型別的傳遞Go型別
- 關於學習java中的按位取反(~)的問題Java
- 有個關於多執行緒的識別問題執行緒
- 關於java的“原子操作”問題Java
- C++中string轉換為char*型別返回後亂碼問題C++型別
- 關於SpringMVC中如何把查詢資料全轉成String型別SpringMVC型別
- 關於oracle中的sql資料型別OracleSQL資料型別
- 關於Java中分層中遇到的一些問題Java
- java web中關於修改xml後讀取值的問題JavaWebXML
- Leetcode刷題中關於java的一些小問題LeetCodeJava
- 關於教程的一個問題
- 關於Java和C#的型別對比JavaC#型別