gpt4 book ai didi

java - 将正则表达式应用于 str.split 方法时出现异常

转载 作者:行者123 更新时间:2023-11-29 03:10:34 24 4
gpt4 key购买 nike

当我在 android 之外,即在纯 java 环境中应用它时,这段代码完全运行。 (有一个链接说它是问题的重复,但它不是)我想知道为什么它在没有 android 的情况下在 java 中运行,但在 android 中崩溃。

String[] ar = new String[iters];
ar = myStr.split("(?<=\\G.{16})");

但是,当我在 android 环境中应用相同的内容时,出现以下异常

04-13 13:50:22.255: E/AndroidRuntime(2147): FATAL EXCEPTION: main
04-13 13:50:22.255: E/AndroidRuntime(2147): java.util.regex.PatternSyntaxException: Look-behind pattern matches must have a bounded maximum length near index 12:
04-13 13:50:22.255: E/AndroidRuntime(2147): (?<=\G.{16})

最佳答案

可能原因:

这看起来像是你的Android使用的Java版本的错误,在后来的Java版本中得到了纠正。

\G 可以被认为是一个 anchor ,它代表任何一个

  • 上一场比赛结束
  • 字符串的开头(如果还没有找到匹配项)

和任何 anchor 一样,它是 zero-length

我怀疑该错误的主要部分是 \G 被后视视为整个前一场比赛,而不是它的结尾,并且由于前一场比赛可能有 任何 长度,后视会提示它因为它无法确定明显的最大长度。

绕一圈。

避免 split("(?<=\\Gwhatever)")

不用查找定界符,而是使用 Matcher 类来对您想从文本中获取的内容进行 find()。所以你的代码看起来像:

String myStr = "0123456789012345678901234567890123456789012345678901234567890123456789";

Matcher m = Pattern.compile(".{1,16}").matcher(myStr);
while (m.find()) {
String s = m.group();
//do what you want with current token stored in `s`
System.out.println(s);
}

输出:

0123456789012345
6789012345678901
2345678901234567
8901234567890123
456789

关于java - 将正则表达式应用于 str.split 方法时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29603616/

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