亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中StringTokenizer類與String.split方法的性能

Java中StringTokenizer類與String.split方法的性能

回首憶惘然 2019-12-21 13:18:09
在我的軟件中,我需要將字符串拆分為單詞。我目前有超過19,000,000個文檔,每個文檔都超過30個字。以下兩種方法中的哪一種是執行此操作的最佳方法(就性能而言)?StringTokenizer sTokenize = new StringTokenizer(s," ");while (sTokenize.hasMoreTokens()) {要么String[] splitS = s.split(" ");for(int i =0; i < splitS.length; i++)
查看完整描述

3 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

在Java 7中拆分只是為該輸入調用indexOf,請參閱參考資料。拆分應該非常快,接近indexOf的重復調用。


查看完整回答
反對 回復 2019-12-21
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

就我所知,另一個未記錄的重要事情是,要求StringTokenizer返回定界符以及帶標記的字符串(通過使用構造函數StringTokenizer(String str, String delim, boolean returnDelims))還可以減少處理時間。因此,如果您正在尋找性能,我建議您使用類似以下的方法:


private static final String DELIM = "#";


public void splitIt(String input) {

    StringTokenizer st = new StringTokenizer(input, DELIM, true);

    while (st.hasMoreTokens()) {

        String next = getNext(st);

        System.out.println(next);

    }

}


private String getNext(StringTokenizer st){  

    String value = st.nextToken();

    if (DELIM.equals(value))  

        value = null;  

    else if (st.hasMoreTokens())  

        st.nextToken();  

    return value;  

}

盡管getNext()方法引入了開銷,但會為您丟棄定界符,但根據我的基準,它仍然快了50%。


查看完整回答
反對 回復 2019-12-21
  • 3 回答
  • 0 關注
  • 1076 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號