我在我的 Java RegEx 中使用 \\r\\n|\n
来匹配换行符。我不关心类似 mac 的换行符。每次我运行我的代码时,我都会收到这样的 StackOverflowError:
java.lang.StackOverflowError
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Neg.match(Pattern.java:4986)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)
at java.util.regex.Pattern$Slice.match(Pattern.java:3870)
at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$Dollar.match(Pattern.java:3621)
at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)
等等……
如果我删除 \\r\\n
就不会发生错误,所以只有 \\n
。但结果并不像它需要的那样......
!请注意,我要处理高达 140k 行的大型输入和大约 50k 场比赛,每场比赛有 5-6 组。较小的输入按预期工作。早期版本使用相同的 RegEx 和相同的输入,也能正常工作。
提前致谢;)
编辑:
我在 while 循环中使用 matcher.find()
访问 java 匹配器。
最佳答案
交替通常会导致堆栈溢出问题(参见 this answer )。您可以使用以下模式不交替和可选模式:
\\r?\\n
这里,\\r?
匹配一个或零个 CR 符号,而 \\n
只匹配 1 个 LF 符号。
或者,使用通用的
\\R
关于java - RegEx 换行符遇到 StackOverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39204882/