Почему в пути я должен использовать двойную обратную косую черту, а в шаблоне глобуса - четверной?
Если я хочу создать экземпляр 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()
Метод обратной косой черты уже используется для экранирования специальных символов:
Символ обратной косой черты (
\
) используется для экранирования символов, которые иначе интерпретировались бы как специальные символы.
Таким образом, чтобы произвести буквальное '\\'
, вы должны избегать каждого обратного слэша, в результате чего \\\\
, Смущает, нет?