Java-эквивалент стенографических строк C# с @

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

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

хммм: на меня вырывается стека Второй пример должен гласить:

C: (двойной обратный слэш)afolder (двойной обратный слэш) AFile

5 ответов

Решение

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

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

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

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

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

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


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

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

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

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

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

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

`c:\afolder\afile`

В Java он есть с сентября 2019 года, но использует другой синтаксис. «» »(Три двойных кавычки).

* В более поздних версиях Java (+13 в предварительном просмотре, +15 при готовности к производству) в большинстве случаев эквивалент может быть достигнут с помощью текстовых блоков Java.

      String html = """         
            <xml>
                <ody>
                    <pan>example xml </pan>
                </ody>
            </xml>""";

Документация на https://docs.oracle.com/en/java/javase/13/text_blocks/index.html

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