PatternSyntaxException Разделение строки Java

У меня есть этот код....

private static final String FS = System.getProperty("file.separator");

private void addPathToTreeFiles(String canonicalFolder, String canonicalFilename) throws Exception {
  String filename = null;
  String canonicalPaths = null;
  try {
    //...
    int lastFS = canonicalFilename.lastIndexOf(FS);
    filename = canonicalFilename.substring(lastFS + 1);
    canonicalPaths = canonicalFilename.substring(0, lastFS + 1).substring(canonicalFolder.length());
    if (canonicalPaths.startsWith(FS)) {
        canonicalPaths = canonicalPaths.substring(FS.length());
    }
    String[] recursivePaths = canonicalPaths.split(FS); //EXCEPTION HERE!
    //...
  } catch (Exception e) {
    System.out.println ("addPathToTreeFiles.canonicalFolder:" + canonicalFolder);
    System.out.println ("addPathToTreeFiles.canonicalFilename:" + canonicalFilename);
    System.out.println ("addPathToTreeFiles.filename:" + filename);
    System.out.println ("addPathToTreeFiles.canonicalPaths:" + canonicalPaths);
    throw e;
  }
}

Исключение возникает в строке

String[] recursivePaths = canonicalPaths.split(FS);

Отправка данных была:

addPathToTreeFiles.canonicalFolder:C:\Users\joseluisbz
addPathToTreeFiles.canonicalFilename:C:\Users\joseluisbz\AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\DeviceSearchCache\AppCache131927693329784900.txt
addPathToTreeFiles.filename:AppCache131927693329784900.txt
addPathToTreeFiles.canonicalPaths:AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\DeviceSearchCache\

Jan 23, 2019 9:41:12 PM org.joseluisbz.filefinder.OneSearch$SwingWorkerSearcher process
SEVERE: null
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
        at java.util.regex.Pattern.error(Unknown Source)
        at java.util.regex.Pattern.compile(Unknown Source)
        at java.util.regex.Pattern.<init>(Unknown Source)
        at java.util.regex.Pattern.compile(Unknown Source)
        at java.lang.String.split(Unknown Source)
        at java.lang.String.split(Unknown Source)
        at org.joseluisbz.filefinder.OneSearch.addPathToTreeFiles(OneSearch.java:692)

С этим значением:

AppData\Local\Packages\Microsoft.Windows.Cortana_cw5n1h2txyewy\LocalState\DeviceSearchCache\

Почему возникает исключение? Как этого избежать?

Это недопустимый шаблон Regex. Посмотрите, что такое FS на самом деле...

Bailey Kocin 24.01.2019 04:11

регулярное выражение для \ равно \\\\

Mustahsan 24.01.2019 04:12

поэтому вы можете использовать FS + FS как регулярное выражение для разделения строки

Mustahsan 24.01.2019 04:14

Спасибо, я потерял фокус, я думал, что только String, а не Regex... Еще раз спасибо.

joseluisbz 24.01.2019 12:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
56
0

Другие вопросы по теме