gpt4 book ai didi

Java Pattern.matcher(StringBuffer),为什么它的行为与 Pattern.matcher(String) 不同?

转载 作者:行者123 更新时间:2023-12-02 00:05:23 24 4
gpt4 key购买 nike

我需要在循环中“缩短”字符串,然后一次又一次地传递它以与 java.regex.Pattern 匹配。对于一些深入参与解析和文本处理的人来说,这可能是一个微不足道的情况。

我面临着必须使用的情况:

string=string.substring(shortenHowMuch); //Need to shorten it from the beginning

...底层开发人员非常清楚,即将整个字符串复制到内存的另一个地址。即使 HotSpot 的优化到位(我知道),我仍然需要确保代码在所有可能的 Java VM 上以最大可能的性能变体运行。

编辑:后来我发现,我上面的说法,即复制字符串,是错误的。所以我的问题应该“见鬼去吧”:) 不管怎样,如果你愿意的话,请阅读:) .substring 不会复制,但它确实共享对 char[],非常有趣:)

最佳答案

您没有解释使用 StringBuilder 时到底发生了什么,所以我无法回答原因。但实际上你不需要 StringBuilder,因为 String.substring 已经过优化,并且它不会复制内部 char 数组。这就是内部发生的事情

public String substring(int beginIndex, int endIndex) {
.....
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value);
}

// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}

关于Java Pattern.matcher(StringBuffer),为什么它的行为与 Pattern.matcher(String) 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com