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

时间:2015-05-13 16:30:26

标签: java regex string split stringbuilder

我将处理文本,并将沿着一条路进行拆分,它的子串就像String.split()这样的正则表达式。我希望在StringBuilder上针对速度问题执行此操作。

据我所知,StringBuilder没有这样的方法。我所能做的就是调用String.split()并将结果转换为StringBuilder []。 但是,这会很慢 - String.split()实习生成的String []的每个条目。

此外 - StringBuilder并未覆盖Object.equals()。当我需要使用StringBuilder作为集合中的类型时, 我正在编写一个包含StringBuilder值字段的包装类,并在该字段的值上覆盖equals()以使其正确。

到目前为止,这些是我能回想起的,我需要做到这一点,而且这个问题很短暂。

我的问题是:

我在这里遗漏了一些东西 - 有没有办法在StringBuilder上获得这些功能,而不会在它们之间使用String来减慢它的速度?

如果没有 - 为什么不呢? StringBuilder的主要原因是以内存为代价的执行时间 - 作为String高效内存的替代,执行速度慢(?) StringBuilder是一种文本类型。为什么它不直接 - split()为一个?

TIA。

1 个答案:

答案 0 :(得分: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可以使用String.substring,它不会分配新的char数组。

正则表达式仍然很慢。