有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用于解析的正则表达式出现java堆栈溢出错误

我知道已经有一些关于正则表达式和长字符串的堆栈溢出错误的帖子,但它们对我没有帮助,也从不关心我的解析问题类型

我只是试着从一个数学函数中找出括号中的字符串

 funktionsstring  
  =SIN(3.141592653589793238462643383279502884197169399375105820974944592307816406
   286208998628034825342117067982148086513282306647093844609550582231725359408
   12848111745028410270193852110555964462294895493038196);

使用以下带模式的代码查找括号中的字符串x,例如(x):

Pattern pattern = Pattern.compile("\\([^(]*?\\)");
Matcher matcher = pattern.matcher(funktionsstring);

我得到以下错误

    Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.util.regex.Pattern.bitsOrSingle(Pattern.java:2553)
at java.util.regex.Pattern.range(Pattern.java:2601)
at java.util.regex.Pattern.clazz(Pattern.java:2507)
at java.util.regex.Pattern.sequence(Pattern.java:2030)
at java.util.regex.Pattern.expr(Pattern.java:1964)
at java.util.regex.Pattern.compile(Pattern.java:1665)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at classes.Parser.Klammerauswertung(Parser.java:104)
at classes.Parser.Klammerauswertung(Parser.java:119)
at classes.Parser.Klammerauswertung(Parser.java:119)

我看不出我是否能以某种方式改进模式,以防止似乎会导致堆栈溢出的迭代。显然,拆分函数在这里不起作用

此外,由于字符串很长,我希望允许n 作为性格。我想用大小数(使用apfloat)来获得至少100到1000个精确的小数,出于科学原因,有可能让regex改变模式吗

如果没有,我该如何重写正则表达式

有更好的工具吗


共 (0) 个答案