Ich bin mit Apache POI in zwei verschiedenen ProjektenPattern mit Apache poi
Das erste Projekt ist eine eigenständige Java-Anwendung. Alles ist gut hier.
Das zweite Projekt ist ein Android-Projekt. Ich kann die Arbeitsmappe eines xlsx zugreifen ganz gut, aber wenn es Formeln zur Bewertung kommt, stürzt es mit einer Ausnahme
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)
Dies ist die betreffende Codezeile ist:
final Pattern nonAlphabeticPattern = Pattern.compile("\\P{IsL}");
Warum Android nicht Akzeptiere das? Wie gesagt: Es funktioniert gut auf einer eigenständigen Java-Anwendung ....
Verwenden 'endgültige Muster geschrieben werden nonAlphabeticPattern = Pattern.compile ("\\ P {L}");' –
Ist das nicht '\\ P { IsL} 'ein vollkommen legales Muster? Laut Oracle ist es möglich, dass Kategorien mit dem optionalen Präfix Is angegeben werden können: Sowohl \ p {L} als auch \ p {IsL} bezeichnen die Kategorie der Unicode-Buchstaben. Wie bei Skripten und Blöcken können auch Kategorien mit dem Schlüsselwort general_category (oder der Kurzform gc) angegeben werden, wie in general_category = Lu oder gc = Lu.' – devnull69
Android verwendet die ICU-Regex-Bibliothek, Java hat einen eigenen ICU-basierten Regex . Siehe [* this *] (https://developer.android.com/reference/java/util/regex/Pattern.html#gnumber): * Unicode-Skripte, Blöcke, Kategorien und binäre Eigenschaften werden mit dem '\ p' geschrieben und '\ P' konstruiert wie in Perl. '\ p {prop}' stimmt überein, wenn die Eingabe die Eigenschaft prop hat, während '\ P {prop}' nicht übereinstimmt, wenn die Eingabe diese Eigenschaft hat. * –