使用apache poi的PatternSyntaxException
我在两个不同的项目中使用Apache POI
第一个项目是一个独立的Java应用程序。 这里一切都很好。
第二个项目是一个Android项目。 我可以很好地访问xlsx的工作簿,但是在评估公式时,它会因exception而崩溃
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.(Pattern.java:394) at java.util.regex.Pattern.compile(Pattern.java:381) at org.apache.poi.ss.formula.functions.TextFunction$5.(TextFunction.java:124) at org.apache.poi.ss.formula.functions.TextFunction.(TextFunction.java:123)
这是有问题的代码行:
final Pattern nonAlphabeticPattern = Pattern.compile("\\P{IsL}");
为什么Android不接受这个? 正如我所说:它在独立的Java应用程序上运行良好….
Android正在使用与Java正则表达式引擎略有不同的ICU正则表达式库。
看到这个参考 :
Unicode脚本,块,类别和二进制属性使用Perl中的
\p
和\P
结构编写。 如果输入具有属性prop,则\p{prop}
匹配,而如果输入具有该属性,则\P{prop}
不匹配。
因此,模式应该写成
Pattern nonAlphabeticPattern = Pattern.compile("\\P{L}");