我在两个不同的项目中使用Apache POIPatternSyntaxException使用apache poi
第一个项目是一个独立的Java应用程序。这里一切都很好。
第二个项目是一个Android项目。我可以访问工作簿的XLSX就好了,但是当涉及到评估公式,因出现异常
java.util.regex.PatternSyntaxException: U_ILLEGAL_ARGUMENT_ERROR \P{IsL}
at java.util.regex.Pattern.compileImpl(Native Method)
at java.util.regex.Pattern.compile(Pattern.java:411)
at java.util.regex.Pattern.<init>(Pattern.java:394)
at java.util.regex.Pattern.compile(Pattern.java:381)
at org.apache.poi.ss.formula.functions.TextFunction$5.<init>(TextFunction.java:124)
at org.apache.poi.ss.formula.functions.TextFunction.<clinit>(TextFunction.java:123)
这是有问题的代码行崩溃:
final Pattern nonAlphabeticPattern = Pattern.compile("\\P{IsL}");
为什么Android的不接受这个?正如我所说:它在单独的Java应用程序上工作正常......
使用'最终图案nonAlphabeticPattern = Pattern.compile( “\\ p {L}”);' –
不是'\\ p { IsL}是一个完全合法的模式吗?根据Oracle的说法,它是'可以用可选的前缀Is来指定类别:\ p {L}和\ p {IsL}表示Unicode字母的类别。与脚本和块相同,也可以使用关键字general_category(或其简写形式gc)指定类别,如general_category = Lu或gc = Lu.' – devnull69
Android正在使用ICU正则表达式库,Java具有自己的基于ICU的正则表达式。请参阅[* this *](https://developer.android.com/reference/java/util/regex/Pattern.html#gnumber):* Unicode脚本,块,类别和二进制属性用'\ p'和'\ P'构造如Perl。如果输入具有属性prop,则'\ p {prop}'匹配,而如果输入具有该属性,则'\ P {prop}'不匹配。“# –