我在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匹配器。
答案 0 :(得分:3)
轮换通常会导致堆栈溢出问题(请参阅this answer)。您可以使用以下模式而不交替使用可选模式:
\\r?\\n
此处,\\r?
匹配一个或零个CR符号,\\n
仅匹配1个LF符号。
或者,使用通用
\\R