Я использую 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.<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)
Это строка кода в вопросе:
final Pattern nonAlphabeticPattern = Pattern.compile("\\P{IsL}");
Почему Android не признать это? Как я уже сказал: он отлично работает на автономном Java-приложении ....
использовать 'окончательного Pattern nonAlphabeticPattern = Pattern.compile ("\\ Р {L}");' –
Не '\\ P { IsL} 'совершенно законный образец? Согласно Oracle, это «Категории могут быть указаны с дополнительным префиксом Is: Both \ p {L} и \ p {IsL} обозначают категорию букв Unicode. То же, что и скрипты и блоки, категории также можно указать, используя ключевое слово general_category (или его короткую форму gc), как в general_category = Lu или gc = Lu.' – devnull69
Android использует библиотеку регулярных выражений ICU, Java имеет собственное регулярное выражение на основе ICU , См. [* This *] (https://developer.android.com/reference/java/util/regex/Pattern.html#gnumber): * Скрипты, блоки, категории и двоичные свойства Unicode записываются с помощью '\ p' и '\ P', как в Perl. '\ p {prop}' соответствует, если вход имеет свойство prop, а '\ P {prop}' не совпадает, если вход имеет это свойство. * –