В Java есть ли способ написать строковый литерал без необходимости экранировать кавычки?
скажем, у вас есть строковый литерал с большим количеством кавычек внутри него. Вы могли бы избежать их всех, но это боль, и трудно читать.
в некоторых языках, вы можете просто сделать это:
foo = '"Hello, World"';
в Java, однако, '' используется char s, так что вы не можете использовать его для Strings сюда. Некоторые языки имеют синтаксис, чтобы обойти это. Например, в Python, вы можете сделать это:
"""A pretty "convenient" string"""
есть ли у Java что-нибудь подобное?
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