В Java есть ли способ написать строковый литерал без необходимости экранировать кавычки?



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



в некоторых языках, вы можете просто сделать это:



foo = '"Hello, World"';


в Java, однако, '' используется char s, так что вы не можете использовать его для Strings сюда. Некоторые языки имеют синтаксис, чтобы обойти это. Например, в Python, вы можете сделать это:



"""A pretty "convenient" string"""


есть ли у Java что-нибудь подобное?

625   7  

7 ответов:

ответ-нет, и доказательство находится в Спецификация Языка Java:

  StringLiteral:
   "StringCharacters"

  StringCharacters:
   StringCharacter
   | StringCharacters StringCharacter

  StringCharacter:
   InputCharacter but not " or \
   | EscapeSequence

как вы можете видеть StringLiteral может быть просто связан с " и не может содержать специальные символы, не убегает..

боковое Примечание: Вы можете встроить в Groovy внутри вашего проекта это расширит синтаксис Java, позволяя вам использовать '''multi line string ''',' "string with single quotes" ' и "string with ${variable}".

нет, и меня всегда раздражало отсутствие разных строковых литеральных синтаксисов в Java.

вот трюк, который я использовал время от времени:

String myString = "using `backticks` instead of quotes".replace('`', '"');

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

вы также можете использовать StringEscapeUtils от Apache commons

обновление: если кто-то заинтересован в некоторых примерах вот полезная ссылка: http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils

там может быть в будущей версии Java (10 или более).

посмотреть JEPS 8196004 С января 2018 года: ( " JEP "- это "программа улучшения JDK")

проект JEP: необработанные строковые литералы

добавьте новый вид литерала, необработанный строковый литерал, в язык программирования Java.
Как и традиционный строковый литерал, необработанный строковый литерал создает строку, но не интерпретирует экранирование строк и может охватывать несколько строк исходного кода.

Так вместо:

Runtime.getRuntime().exec("\"C:\Program Files\foo\" bar");
String html = "<html>\n"
              "    <body>\n" +
              "         <p>Hello World.</p>\n" +
              "    </body>\n" +
              "</html>\n";
System.out.println("this".matches("\w\w\w\w"));

вы могли бы типа:

Runtime.getRuntime().exec(`"C:\Program Files\foo" bar"`);

String html = `<html>
                   <body>
                       <p>Hello World.</p>
                   </body>
               </html>
              `;

System.out.println("this".matches(`\w\w\w\w`));

аккуратно!

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

простой ответ: Нет.

для более длинных строк, которые должны быть экранированы, я обычно читаю их от какого-либо внешнего ресурса.

следующий, кажется, работает для меня:

String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";

Я думаю, потому что char является примитивным типом переменной для String, Strings и chars могут быть объединены (по крайней мере, компилятор eclipse, похоже, не жалуется).

Если вы хотите, чтобы избежать ' или " в строке, вы можете использовать следующий код:

String text = ...

text = text.replaceAll("('|\")", "\\");

Comments

    Ничего не найдено.