Запрос символа обратной косой черты

1

Ниже приведена строка, которая создает путь к каталогу в java.

Здесь File.separator "\" на окнах и "/" в Unix.

String path = System.getProperty("user.home") + File.separator + "workspace" + 
                                              File.separator + "JavaCode";

Если я жестко задал путь, он должен выглядеть так, как показано ниже:

File path = new File("C:\\users\\david\\workspace\\JavaCode");

Мой вопрос:

Почему мы упомянем \\ во втором случае?

  • 1
    Потому что так вы пишете одну обратную косую черту в строковом литерале
  • 1
    Этот жестко закодированный пример не скомпилируется: вы присваиваете File переменной path типа String .
Показать ещё 1 комментарий
Теги:
escaping

2 ответа

2
Лучший ответ

Потому что, с строкой, \ является escape-символом: он говорит, что особым образом интерпретирует следующий символ (поэтому \n не является n). В вашем случае вы хотите, чтобы \ себя интерпретировали специально, не рассматривая его специально, поэтому вам нужно 2 из них: первый говорит "относиться к следующему символу особым", а следующий обрабатывается специально для a \.

  • 0
    Но почему при использовании File.separator мне не потребовалось две обратные File.separator ?
  • 0
    Откуда вы знаете, что это не то, что находится в File.separator?
Показать ещё 2 комментария
2

Это связано с тем, как строковые литералы определены в Java. Для некоторых управляющих последовательностей (например, "\n", "\r" и других) используется обратная косая черта, поэтому буквальная обратная косая черта также является escape-последовательностью ("\\").

Вернемся к вашему коде, однако, не беспокойтесь, вместо этого используйте java.nio.file:

final Path path = Paths.get(System.getProperty("user.home"), "workspace",
    "JavaCode");

Работает для каждой ОС JVM (7+).

Он корректно вернет Path для "C:\\users\\david\\workspace\\JavaCode" на вашем компьютере так же, как и для "/home/fge/workspace/JavaCode" на моем компьютере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню