gpt4 book ai didi

Java String.split() 失控

转载 作者:行者123 更新时间:2023-12-02 09:11:03 27 4
gpt4 key购买 nike

我正在尝试根据空白(空格、返回键、制表符)解析字符串(有些可能很长、段落)。当前使用String.split("\\s++")。在我们更新的上一个项目中,我们只是使用了StringTokenizer。使用 String.split("\\s++") 在我们所有的测试和所有 Beta 测试人员中都表现得很好。

当我们将其发布给扩展的用户时,它会运行一段时间,直到耗尽所有服务器资源。根据我的研究,这似乎是灾难性的回溯。我们收到如下错误:

    ....was in progress with java.base@11.0.5/java.util.regex.Pattern$GroupHead.match(Pattern.java:4804)
java.base@11.0.5/java.util.regex.Pattern$Start.match(Pattern.java:3619)
java.base@11.0.5/java.util.regex.Matcher.search(Matcher.java:1729)
java.base@11.0.5/java.util.regex.Matcher.find(Matcher.java:746)
java.base@11.0.5/java.util.regex.Pattern.split(Pattern.java:1264)
java.base@11.0.5/java.lang.String.split(String.java:2317)

用户可以输入一些疯狂的文本。解析 10 个字符到 1000 个字符长的字符串的最佳选项是什么?我在砖墙上。过去 4 天一直在尝试不同的模式(正则表达式不是我最擅长的领域),但没有取得长期成功。

最佳答案

如果您不信任正则表达式,简单的解决方案是使用非基于正则表达式的解决方案,例如 ApacheCommons StringUtils#split。或者,您自己编写一个也很容易。

请记住,使用 StringTokenizer 与 split 函数之间的区别是标记生成器是惰性的。如果您只检索分割结果的子集,则分割可能会消耗更多内存。不过,我只希望这是大字符串的问题。

关于Java String.split() 失控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59415645/

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