2013-05-21 55 views
3

請考慮下面的代碼:試圖瞭解下面的代碼逆轉一句

public class SentenceReversal { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 


     String[] parts = "This is an interview Question".split("\\b"); 
     StringBuilder sb = new StringBuilder(); 
     for (int i = parts.length; i --> 0 ;) { 
      sb.append(parts[i]); 
     } 
     System.out.println("[" + sb.toString() + "]"); 

} 
} 

什麼是「\ b」被以分流功能做什麼?除去它產生以下結果(這意味着僅使用分裂(「」)):

[noitseuQ weivretni na si sihT]

而且,這是什麼' - >」運營商在做的循環?我不太明白。請幫助我理解我的問題。

由於

+7

'i - > 0' ==>'i--> 0'。 –

+0

[Javadocs for'Pattern'](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#bounds)說「一個單詞邊界」 – asgs

+1

'我 - - > 0;'部分實際上是'i - > 0',這是使用一元運算符'--'。它與'i> 0'相同,接着'i = i-1'。 – acdcjunior

回答

6

String.split()分割基於正則表達式的字符串。

\b是一個正則表達式表達,並且表示它作爲\\b傳遞因爲Java需要\逃脫了與另一\字邊界,即線的開始,線的端部,一個空格,標點符號等。

當你用""分割()時,你基本上沒有任何東西分裂,因此輸入字符串被分解成數組中的單個字母,然後被反向迭代,因此你得到一個字符串與其所有字母的話)逆轉。

只是爲了闡述@ LuiggiMendoza的意見

i --> 0 // gets interpreted as 
i-- > 0 // i.e. it uses a post-fix decrement operator 

這意味着i價值被comapred到0第一,然後i = i - 1發生。

另外,還要注意(在Java 串池將創造太多不必要的字符串)使用的StringBuilder,而不是StringBuffer(線程安全的,但慢)或純String串聯。

+2

不要忘記添加我的評論作爲您的答案的一部分。 –