StringBuilder与Ropes

时间:2011-05-14 07:39:56

标签: java stringbuilder ropes

早上好,

我正在编写一个语言解析器,我正在寻找用于回滚缓存的最佳结构,目前正在执行以下操作:

  • 从流中请求新字符时,如果请求回滚,该字符将添加到缓存中。
  • 当请求回滚时,返回到缓存中的某个点,这样当请求另一个字符时,它会从那里获取它。
  • 找到令牌后,将回滚缓存中的所有内容移除到当前位置。

简而言之,我很想知道您认为哪种数据结构最适合:

  • 优先级1:追加字符(codePoints是一个受欢迎的补充)
  • 优先级2:对数据结构执行子字符串(如StringBuilder.delete(...))(或完全清除)
  • 优先级3:能够创建缓存的字符串(例如StringBuilder.toString())

我希望尽快收到你的来信!

2 个答案:

答案 0 :(得分:1)

如果我是你,对于这种专门的使用以及可能的性能和资源限制,我将从原语实现我自己的缓冲区。我认为适应现有结构更加困难。当然,如果它没有受到伤害,我会尝试遵循众所周知的相关界面,例如CharSequenceAppendableList等。

答案 1 :(得分:0)

我怀疑StringBuilder和PushbackReader的组合可以满足您的需求。使用StringBuilder来累积字符并创建令牌字符串,使用PushbackReader的markreset方法来实现回滚。

或者,将整个输入文件预读为String,然后通过索引String并获取子字符串来实现tokenizer。