Używam Apache POI w dwóch różnych projektach
Pierwszy projekt to samodzielna aplikacja Java. Tutaj wszystko wporządku.
Drugi projekt to projekt na Androida. Mogę uzyskać dostęp do skoroszytu xlsx, ale jeśli chodzi o ocenę formuł, to zawiesza się przy wyjątku
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)
To jest linia kodu, o której mowa:
final Pattern nonAlphabeticPattern = Pattern.compile("\P{IsL}");
Dlaczego Android tego nie akceptuje? Jak powiedziałem: działa poprawnie na samodzielnej aplikacji Java ....
Odpowiedzi:
2 dla odpowiedzi № 1Android korzysta z biblioteki wyrażeń regularnych ICU, która jest nieco inna niż silnik wyrażeń regularnych Java.
Widzieć to odniesienie:
Skrypty, bloki, kategorie i właściwości binarne Unicode są zapisywane za pomocą
p
iP
konstrukcje jak w Perlu.p{prop}
pasuje, jeśli wejście ma podpórkę właściwości, podczas gdyP{prop}
nie pasuje, jeśli wejście ma tę właściwość.
Tak więc wzór powinien być zapisany jako
Pattern nonAlphabeticPattern = Pattern.compile("\P{L}");