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型別
- String型別函式傳遞問題型別函式
- 關於int型別數值的運算問題型別
- 一個關於Linq對引用型別元素集合去重問題的思考型別
- Java泛型型別擦除問題Java泛型型別
- Java中String和byte型別互相轉換Java型別
- Leetcode刷題中關於java的一些小問題LeetCodeJava
- [BUG反饋]關於ot模型中的時間型別欄位bug問題模型型別
- 關於影像識別的問題
- SpringBoot中關於Mybatis使用的三個問題Spring BootMyBatis
- Elasticsearch中關於transform的一個問題分析ElasticsearchORM
- java中判斷String型別為空和null的方法Java型別Null
- C++中string轉換為char*型別返回後亂碼問題C++型別
- Java中關於二分查詢的問題Java
- 有個關於多執行緒的識別問題執行緒
- 關於VS2017中const char *不能用於初始化char *型別的實體的問題型別
- 關於 Go 中 Map 型別和 Slice 型別的傳遞Go型別
- 深度解密Go語言之關於 interface 的10個問題解密Go
- 關於Java中分層中遇到的一些問題Java
- 關於Java和C#的型別對比JavaC#型別
- String 型別型別
- Long型別框架自動序列化成String失效問題排查型別框架
- 關於 GO 中 flag.StringVar 或者 flag.String 都獲取不到值的問題Go
- 深入理解 JavaScript 中的型別和型別判斷問題JavaScript型別
- Java中基於泛型的交叉型別 - {4Comprehension}Java泛型型別
- 關於Xcode10中libstdc報錯問題的解決XCode
- win10 下關於redis的相關問題Win10Redis
- String:字串型別字串型別
- 關於工作中遇到的問題
- 關於cuda中的函式問題函式
- Java中Switch支援String字串?為什麼不支援long型別?Java字串型別
- String和StringBuffer型別資料進行引數傳遞問題型別
- 關於 AppCrawler 執行過程中的幾個小問題APP
- Java併發(11)- 有關執行緒池的10個問題Java執行緒
- 關於Integer面試的一個問題面試
- 關於ImageView的幾個常見問題View
- 關於解決問題的幾個段位
- 關於dcat-admin的兩個問題...
- 關於一個歸檔問題?