在没有 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 数组。
正则表达式仍然很慢。
我将处理文本,并将一路拆分为一个,它的正则表达式子字符串如 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 数组。
正则表达式仍然很慢。