Почему в пути я должен использовать двойную обратную косую черту, а в шаблоне глобуса - четверной?

Если я хочу создать экземпляр Path в Java я должен написать что-то вроде этого:

Paths.get("D:\\dir1\\dir2\\dir3");

Таким образом, я должен использовать двойную обратную косую черту

Также я могу использовать одну косую черту

Paths.get("D:/dir1/dir2/dir3");

Если я хочу написать шаблон GLOB, у меня есть следующие варианты:

FileSystems.getDefault().getPathMatcher("glob:D:/dir1/dir2/**");

или же

FileSystems.getDefault().getPathMatcher("glob:D:\\\\dir1\\\\dir2\\\\**");

Я не понимаю этой ускользающей магии. Просьба уточнить.

2 ответа

Решение

Причина в том, \ используется для указания escape-символов на многих языках. Но нет /,

Пример:
\n = новая строка
\t = вкладка

а также

\\ знак равно \

Для того, чтобы представлять \ в строке, вы должны использовать \\, Следовательно, каждый раз, когда вы используете \\будет проанализировано как \,

РЕДАКТИРОВАТЬ:

в FileSystems.getDefault().getPathMatcher(), ему нужен шаблон. Шаблоны также делает разбор. Чтобы получить D:\dir1\dir2\** в качестве намеченного пути, вы должны использовать \\ вместо \и так как он указан как шаблон, каждый \ из \\ должен быть представлен как \\, Итак, в конце концов, каждый \ представляется как \\\\,

Ищите регулярные выражения для получения дополнительной информации,

Как вы знаете, в регулярном выражении необходимо экранировать обратную косую черту, чтобы получить буквальную обратную косую черту: \\ -> '\', в getPathMatcher() Метод обратной косой черты уже используется для экранирования специальных символов:

Символ обратной косой черты (\) используется для экранирования символов, которые иначе интерпретировались бы как специальные символы.

Таким образом, чтобы произвести буквальное '\\', вы должны избегать каждого обратного слэша, в результате чего \\\\, Смущает, нет?

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