Допустим, у вас есть строковый литерал с множеством кавычек внутри. Вы можете избежать их всех, но это больно и трудно читать.
На некоторых языках вы можете просто сделать это:
foo = '"Hello, World"';
В Java, однако, ''
используется для char
s, поэтому вы не можете использовать его String
таким образом. В некоторых языках есть синтаксис, позволяющий обойти это. Например, в Python вы можете сделать так:
"""A pretty "convenient" string"""
Есть ли в Java что-нибудь подобное?
System.out.println(mapperObj.writeValueAsString(mapperObj.readValue(str, Object.class)));
Ответы:
Ответ отрицательный, и доказательство содержится в Спецификации языка Java :
Как видите, a
StringLiteral
может быть просто привязан к"
специальному символу и не может содержать его без экранирования.Примечание: вы можете встроить Groovy в свой проект, это расширит синтаксис Java, позволяя вам использовать
'''multi line string '''
,' "string with single quotes" '
а также"string with ${variable}"
.источник
Нет, и меня всегда раздражало отсутствие различных синтаксисов строковых литералов в Java.
Вот трюк, который я использовал время от времени:
В основном я делаю что-то подобное только для статического поля. Поскольку он статичен, код замены строки вызывается один раз при инициализации класса. Таким образом, потери производительности во время выполнения практически не существует, и это делает код значительно более разборчивым.
источник
Обновление декабрь 2018 г. (12 месяцев спустя):
Необработанные строковые литералы (которые находятся в желтом списке ) не попадут в JDK 12.
См. Критику здесь .
Может быть в будущей версии Java (10 или больше).
См. JEPS 8196004 от января 2018 г .: ( «JEP» - это «Программа расширения JDK» )
Так что вместо:
Вы можете ввести:
Ухоженная!
Но это все еще только черновик : его нужно будет опубликовать, отправить, быть кандидатом и профинансировать, прежде чем он будет завершен и внесен в следующий JDK.
источник
Простой ответ: нет.
Для более длинных строк, которые необходимо экранировать, я обычно читаю их с какого-то внешнего ресурса.
источник
вы также можете использовать StringEscapeUtils из общего доступа Apache
ОБНОВЛЕНИЕ : Если кого-то интересуют некоторые примеры, вот полезная ссылка: https://dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
источник
String
s, поэтому в вашем коде невозможно иметь красиво отформатированное значение. Предположительно, вы могли бы использовать эти методы для чтения из файла в файлString
, но я не думаю, что здесь вопрос.Мне кажется, работает следующее:
Я думаю, потому что char - это примитивный тип переменной для String, Strings и chars могут быть объединены (по крайней мере, компилятор eclipse, похоже, не жалуется).
источник
Если вы хотите экранировать
'
или"
в своей строке, вы можете использовать следующий код:источник