Java-эквивалент стенографических строк C # с @ - PullRequest
92 голосов
/ 20 апреля 2010

Быстрый вопрос.Существует ли эквивалент @ применительно к строкам в Java:

Например, я могу сделать @"c:\afolder\afile" в C # и заставить его игнорировать escape-символы при обработке вместо необходимости делать "c:\\afolder\\aFile".Есть ли эквивалент Java?

мммм: stackoverflow ускользает от меня .. смеется.Второй пример должен выглядеть следующим образом:

c: (двойной обратный слеш) afolder (двойной обратный слеш) aFile

Ответы [ 4 ]

70 голосов
/ 20 апреля 2010

Нет . Экранирование / вывод строки - ваш единственный выбор.

30 голосов
/ 20 апреля 2010

Нет, в Java нет дословных строковых литералов .

Если вы хотите подобный Java (и основанный на Java-VM) язык, который имеет тем не менее, вы можете посмотреть на Groovy , который имеет различные формы строкового литерала .

15 голосов
/ 20 апреля 2010

Как сказали Кент и Джон, нет, нет.

Я отвечаю просто для того, чтобы указать, что даже если бы это было для вашего конкретного случая, это было бы плохой идеей в общем случае, предполагая более чем разовую программу.

Java-программы работают на большем количестве платформ, чем просто Windows, а другие платформы имеют разные разделители файлов. Таким образом, вместо обращения к экранированным обратным слешам правильный способ обработки вашего конкретного примера - получить свойство разделителя файлов:


    String sep = System.getProperty("file.separator");
    String filename = ROOTDIR + sep + "folder" + sep + "afile";

Где бы вы создали ROOTDIR отдельно, основываясь на какой-то политике - не только на платформе, но и на том, хотите ли вы, чтобы ваш «файл» был относительно реального корня файловой системы или относительно домашнего каталога пользователя.

Но, безусловно, использование свойства разделителя файлов делает ваши программы более широко используемыми. Это больше работы? Да. Как говорит Ванда Сайкс: «Но оно того стоит».

9 голосов
/ 29 марта 2018

В настоящее время он не поддерживается в Java, но может быть доступен в будущих выпусках. Создано JEP 326: Необработанные строковые литералы в 2018/01/23

Смотрите прогресс на https://bugs.openjdk.java.net/browse/JDK-8196004

Возможно, когда-нибудь вы сможете сделать это с:

`c:\afolder\afile`

ОБНОВЛЕНИЕ: JEP предложил отказаться от JDK 12: 326: необработанные строковые литералы (предварительная версия) Вы можете прочитать обоснование здесь: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

А подробности тут https://bugs.openjdk.java.net/browse/JDK-8215682

Суть : в ближайшем будущем на Java не будет дословных строк. И даже если он появится, он скорее не будет ``.

...