2011-09-18 113 views
4

在java中保存固定的字符串緩衝區長度的最佳做法是什麼?也就是說,如果固定值爲10,並且stringbuffer包含ABCDEFGHIJ,那麼當我們追加K時,會導致A被清除,結果值將爲BCDEFGHIJK。我在考慮使用StringBuffer的reverse()和setLenght()方法組合,但不知道它的性能如何達到100 K的長度。java中的固定長度的StringBuffer

回答

2

你可以使用delete

void append(String s) { 
    buffer.append(s); 
    if(buffer.length() > MAX_LENGTH){ 
     buffer.delete(0, buffer.length() - MAX_LENGTH); 
    } 
} 

更新:如果參數是一個長字符串這導致不必要的StringBuffer分配。爲了避免這種情況,您可以先縮短緩衝區,然後只根據需要添加儘可能多的字符串字符:

void append(String s) { 
    if (buffer.length() + s.length() > MAX_LENGTH) { 
     buffer.delete(0, buffer.length() + s.length() - MAX_LENGTH); 
    } 
    buffer.append(s, Math.max(0, s.length() - MAX_LENGTH), s.length()); 
} 
9

這聽起來像是你在循環緩衝區之後。您可以創建char[]並保持大小以及邏輯開始。然後當你需要將它轉換成一個字符串時,你可以創建兩個字符串(一個從緩衝區的末尾開始,另一個從開始)並將它們連接在一起。這將是相對昂貴的 - 儘量保持它儘可能多的時間作爲循環緩衝區。

請確保在每次操作時,您還考慮緩衝區而非的可能性已滿。採樣操作:

public void append(char c) 
{ 
    buffer[(size + start) % maxLength] = c; 
    if (size == maxLength) 
    { 
     start = (start + 1) % maxLength; 
    } 
    else 
    { 
     size++; 
    } 
}