在没有 String.split() 的情况下拆分 StringBuilder 值

splitting a StringBuilder value without String.split()

我将处理文本,并将一路拆分为一个,它的正则表达式子字符串如 String.split() does. i'm looking to do these on StringBuilder 出于速度考虑。

据我所知,StringBuilder 没有这样的方法。我所能做的就是调用 String.split() and turn the result into StringBuilder []。 然而,这会很慢——String.split() 实习它产生的 String[] 的每个条目。

另外 - StringBuilder isn't overriding Object.equals(). when i need to use StringBuilder 作为集合中的类型, 我正在编写一个包装器 class,该包装器在此字段的值上有一个 StringBuilder value-field and overriding equals() 以使其正确。

到目前为止,这些是我记得我需要的 2 个,但还不够。

我的问题是:

我是不是遗漏了一些东西 - 有没有办法在 StringBuilder 上获得这些功能,而无需中间的 String 来减慢速度?

如果不是 - 为什么不呢? StringBuilder 存在的主要原因是以内存为代价的执行时间——作为 String 高效内存但执行速度慢的替代方案(?) StringBuilder 是一种文本类型。为什么它不直接拥有这些——其中之一是 split()?

TIA。

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 可以利用 String.substring,它不分配新的 char 数组。

正则表达式仍然很慢。