亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Java中關(guān)于String類型的10個(gè)問題

asal 2016-11-09 15:26:31 428
abstrak:1. 如何比較兩個(gè)字符串?用“=”還是equals簡(jiǎn)單來說,“==”是用來檢測(cè)倆引用是不是指向內(nèi)存中的同一個(gè)對(duì)象,而equals()方法則檢測(cè)的是兩個(gè)對(duì)象的值是否相等。只要你想檢測(cè)倆字符串是不是相等的,你就必須得用equals()方法。如果你知道“字符串保留(string intern)”的概念那就更好了。2. 為什么安全敏感的字符串信息用char[]會(huì)比String對(duì)象更好?String對(duì)象是不

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

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

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

2. 為什么安全敏感的字符串信息用char[]會(huì)比String對(duì)象更好?

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

3. 字符串對(duì)象能否用在switch表達(dá)式中?

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

<span class="hljs-comment">// java 7 only!
<span class="hljs-keyword">switch (str.toLowerCase()) {
      <span class="hljs-keyword">case <span class="hljs-string">"a":
           <span class="hljs-keyword">value = <span class="hljs-number">1;
           <span class="hljs-keyword">break;
      <span class="hljs-keyword">case <span class="hljs-string">"b":
           <span class="hljs-keyword">value = <span class="hljs-number">2;
           <span class="hljs-keyword">break;
}</span></span></span></span></span></span></span></span></span></span></span></span>

4. 如何將字符串轉(zhuǎn)換為整型數(shù)值?

<span class="hljs-keyword">int n = Integer.parseInt(<span class="hljs-string">"10");</span></span>

如此簡(jiǎn)單,經(jīng)常使用有偶爾也會(huì)被遺忘。

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

我們可以很便捷的使用正則表達(dá)式來進(jìn)行分隔?!癨s”就表示空格,還有如””,”\t”,”\r”,”\n”.

<span class="hljs-type">String[] strArray = aString.<span class="hljs-built_in">split(<span class="hljs-string">"\\s+");</span></span></span>

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

在JDK6中,這個(gè)方法只會(huì)在標(biāo)識(shí)現(xiàn)有字符串的字符數(shù)組上 給一個(gè)窗口來表示結(jié)果字符串,但是不會(huì)創(chuàng)建一個(gè)新的字符串對(duì)象。如果需要?jiǎng)?chuàng)建個(gè)新字符串對(duì)象,可以這樣在結(jié)果后面+一個(gè)空的字符串:

str.substring(m, n) + <span class="hljs-string">""</span>

這么寫的話就會(huì)創(chuàng)建一個(gè)新的字符數(shù)組來表示結(jié)果字符串。同時(shí),這么寫也有一定的幾率讓你的代碼跑的更快,因?yàn)槔厥掌鲿?huì)吧沒有在使用的大字符串回收而留下子字符串。

Oracle JDK7中的substring()方法會(huì)創(chuàng)建一個(gè)新的字符數(shù)組,而不用之前存在的??纯催@張圖就會(huì)明白substring()方法在JDK6和JDK7中的區(qū)別。

7. String&StringBuilder&StringBuffer

String vs StringBuilder:StringBuilder是可變的,這就意味你在創(chuàng)建對(duì)象之后還可以去修改它的值。StringBuilder vs StringBuffer:StringBuffer是同步的,意味著它是線程安全的,但是就會(huì)比StringBuilder慢些。

8. 如何快速重復(fù)構(gòu)造一段字符串?

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

<span class="hljs-built_in">String str = <span class="hljs-string">"abcd";
<span class="hljs-built_in">String repeated = StringUtils.repeat(str,<span class="hljs-number">3);
<span class="hljs-comment">//abcdabcdabcd</span></span></span></span></span>

9. 如何將時(shí)間格式的字符串轉(zhuǎn)換成date對(duì)象?

<span class="hljs-built_in">String str = <span class="hljs-string">"Sep 17, 2013";
<span class="hljs-built_in">Date date = <span class="hljs-keyword">new SimpleDateFormat(<span class="hljs-string">"MMMM d, yy", Locale.ENGLISH).parse(str);
System.out.println(date);
<span class="hljs-comment">//Tue Sep 17 00:00:00 EDT 2013</span></span></span></span></span></span>

10. 如何計(jì)數(shù)一個(gè)字符在某個(gè)字符串中出現(xiàn)的次數(shù)?

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

<span class="hljs-keyword">int n = StringUtils.countMatches(<span class="hljs-string">"11112222", <span class="hljs-string">"1");
System.out.printl<span class="hljs-string">``<span class="hljs-string">`  n(n);</span></span></span></span></span>


Nota Keluaran

Penyertaan Popular