2012-05-28 36 views
1

當我們擴展DefaultHandler時,通常會覆蓋字符函數。使用java字符串的效率

我想知道這將是一個更有效的方式來提取所提供的字符串...


  1. 會是使用for循環和一個StringBuilder?

    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException { 
        StringBuilder sb = new StringBuilder(length); 
        for(int i=start; i<start+length; i++) 
         sb.append(ch[i]); 
        String values = sb.toString(); 
    } 
    
  2. 難道是用一個簡單的字符串?

    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException { 
        String values = (new String(ch)).substring(start, start + length); 
    } 
    
  3. 難道還有其他的方法嗎?

+1

**請注意** #characters(char [] ch,int,int)'方法*可能會在一行中被多次調用,您應該**將**字符數據添加到' StringBuilder'類成員,不處理直到你點擊相關的'#endElement(String,String,String)'調用。追加字符應該通過調用'StringBuilder#append(char [],int,int)'來完成。 – Jens

+0

@Jens你是對的!我一直在與飼料工作了很多,我注意到了這種行爲。問題是使用StringBuilder追加(特別是維護引用的部分)會太麻煩。在這種情況下,我更喜歡使用字符串連接。 –

+0

如果你正在手動實現'ContentHandler',你應該考慮使用某種框架 - 即使像[android.sax](http://stackoverflow.com/a/10768314/967142)中內置的簡單框架可能會簡單的事情給你。 – Jens

回答

5

a constructor這需要一個char []和一個範圍,如果這是你在找什麼:

new String(ch, start, length); 
+0

哦,不用說,它會比任何表現都好。 –

0

String類有新的構造,可以實現如下

您的要求
1) new String(char[] value) 

2) new String(char[] value, int StartIndex, int numberOfCharacter)