내부에 따옴표가 많은 문자열 리터럴이 있다고 가정합니다. 당신은 그들 모두를 피할 수 있지만 고통스럽고 읽기가 어렵습니다.
일부 언어에서는 다음과 같이 할 수 있습니다.
foo = '"Hello, World"';
자바 그러나, ''
사용되는 char
당신이 그것을 사용할 수 있도록의 String
이런 식의. 일부 언어에는이 문제를 해결할 수있는 구문이 있습니다. 예를 들어, 파이썬에서는 다음과 같이 할 수 있습니다.
"""A pretty "convenient" string"""
Java에도 비슷한 것이 있습니까?
답변
대답은 ‘아니요’이며 그 증거는 Java 언어 사양에 있습니다 .
StringLiteral:
"StringCharacters"
StringCharacters:
StringCharacter
| StringCharacters StringCharacter
StringCharacter:
InputCharacter but not " or \
| EscapeSequence
보시다시피 a StringLiteral
는 "
이스케이프없이 특수 문자를 포함 할 수 없습니다.
참고 : 프로젝트 내부 에 Groovy 를 임베드 할 수 있습니다 . 이렇게하면 Java 구문이 확장되어 '''multi line string '''
, ' "string with single quotes" '
및 "string with ${variable}"
.
답변
아니요, 저는 Java에 다른 문자열 리터럴 구문이 없다는 사실에 항상 짜증이났습니다.
다음은 내가 가끔 사용한 트릭입니다.
String myString = "using `backticks` instead of quotes".replace('`', '"');
나는 주로 정적 필드에 대해서만 이와 같은 작업을 수행합니다. 정적이기 때문에 문자열 교체 코드는 클래스 초기화시 한 번 호출됩니다. 따라서 런타임 성능 불이익은 거의 존재하지 않으며 코드를 훨씬 더 읽기 쉽게 만듭니다.
답변
2018 년 12 월 업데이트 (12 개월 후) :
원시 문자열 리터럴 ( 호박색 목록에 있음 )은 JDK 12에 적용되지 않습니다 . 여기
에서 비판을 참조 하십시오 .
향후 버전의 Java (10 이상)가있을 수 있습니다.
2018 년 1 월의 JEPS 8196004 참조 : ( “JEP”는 “JDK 향상 프로그램”입니다. )
JEP 초안 : 원시 문자열 리터럴
Java 프로그래밍 언어에 새로운 종류의 리터럴 인 원시 문자열 리터럴을 추가합니다.
전통적인 문자열 리터럴과 마찬가지로 원시 문자열 리터럴은 String을 생성하지만 문자열 이스케이프를 해석하지 않으며 여러 줄의 소스 코드에 걸쳐있을 수 있습니다 .
그래서 대신 :
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로 만들기 전에 게시, 제출, 후보자 및 자금 지원이 필요합니다.
답변
간단한 대답 : 아니요.
이스케이프해야하는 긴 문자열의 경우 일반적으로 외부 리소스에서 읽습니다.
답변
Apache Commons에서 StringEscapeUtils 를 사용할 수도 있습니다.
업데이트 : 누군가가 몇 가지 예에 관심이 있다면 유용한 링크가 있습니다 .https : //dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
답변
다음은 나를 위해 작동하는 것 같습니다.
String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";
나는 char이 String, Strings 및 chars의 기본 변수 유형이기 때문에 결합 될 수 있다고 생각합니다 (적어도 이클립스 컴파일러는 불평하지 않는 것 같습니다).
답변
이스케이프 '
하거나 "
문자열에서 다음 코드를 사용할 수 있습니다.
String text = ...
text = text.replaceAll("('|\")", "\\\\$1");