Estou usando o Apache POI em dois projetos diferentes
O primeiro projeto é um aplicativo Java independente. Tudo está bem aqui.
O segundo projeto é um projeto Android. Eu posso acessar a pasta de trabalho de um xlsx muito bem, mas quando se trata de avaliar fórmulas, ele cai com uma exceção
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)
Esta é a linha de código em questão:
final Pattern nonAlphabeticPattern = Pattern.compile("\P{IsL}");
Por que o Android não aceita isso? Como eu disse: ele está funcionando bem em um aplicativo Java independente ....
Respostas:
2 para resposta № 1O Android está usando a biblioteca de regex ICU, que é um pouco diferente do mecanismo de regex Java.
Vejo esta referência:
Scripts Unicode, blocos, categorias e propriedades binárias são escritas com o
p
eP
constrói como em Perl.p{prop}
corresponde se a entrada tiver a propriedade prop, enquantoP{prop}
não corresponde se a entrada tiver essa propriedade.
Assim, o padrão deve ser escrito como
Pattern nonAlphabeticPattern = Pattern.compile("\P{L}");