2015-05-13 56 views
0

我將處理文本,並且會沿着一條線分割,其正則表達式的子字符串像String.split()一樣。我正在尋找這些StringBuilder這些速度問題。分割一個StringBuilder值而不使用String.split()

從我所知,StringBuilder沒有這樣的方法。我所能做的就是調用String.split()並將結果轉換爲StringBuilder []。然而,這將會很慢 - String.split()實習生的每一個String []條目。

另外 - StringBuilder不是覆蓋Object.equals()。當我需要使用StringBuilder作爲集合中的類型時, 我正在編寫一個包裝類,該值包含StringBuilder值字段並且重寫equals()以使該字段的值正確。

這些是迄今爲止的2我記得我需要和那短暫。

我的Q是:

我在這裏失去了一些東西 - 有沒有辦法讓StringBuilder這些功能,而無需在字符串之間慢下來?

如果不是 - 爲什麼不呢? StringBuilder的主要原因是以內存爲代價的執行時間 - 作爲字符串高效緩存內存的替代方法(?) 而StringBuilder是一種文本類型。爲什麼不直接 - split()for one?

TIA。

回答

0

StringBuilder也是一個CharSequence。

Pattern pattern = Pattern.compile(",\\s*"); // Best static final. 
Matcher m = pattern.matcher(stringBuilder); 
int pos0 = 0; 
while (m.find()) { 
    int pos1 = m.start(); 
    CharSequence cs = stringBuilder.subSequence(pos0, pos1); 
    ... 
    pos0 = pos1; 
} 
CharSequence cs = stringBuilder.subSequence(pos0, stringBuilder.length()); 
... 

當然s是CharSequence或String。字符串可以使用String.substring,它不分配新的字符數組。

正則表達式仍然很慢。

+0

這將=通過實習,看起來不錯。當reg.expression僅爲1個字符時,String.split()的實現更快。任何想法爲什麼StringBuilder是「苗條」的這些,一個等於()爲一個服務的目的? – Roam

+0

你能改述「爲什麼..」嗎? –

+0

one wd期望StringBuilder重寫equals()。閱讀我的使用StringBuilder作爲集合中條目的類型。 StringBuilder最有可能對其文本條目的值有用。但是,equals()是「判斷」其內存引用上的實例 - 而不是文本值。這就像java.lang.Integer不重寫equals--幸運的是不是這種情況。 – Roam

相關問題