/ / PatternSyntaxException przy użyciu apache poi - java, android, regex, apache-poi

PatternSyntaxException za pomocą apache poi - java, android, regex, apache-poi

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 № 1

Android 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 i P konstrukcje jak w Perlu. p{prop} pasuje, jeśli wejście ma podpórkę właściwości, podczas gdy P{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}");