@가있는 C #의 축어 문자열에 해당하는 Java


101

빠른 질문. Java의 문자열에 적용된 @와 동등한 것이 있습니까?

예를 들어 @"c:\afolder\afile"C #에서 할 수 있으며 처리 할 때 이스케이프 문자를 무시하도록 할 수 "c:\\afolder\\aFile"있습니다. Java에 상응하는 것이 있습니까?

hmmm : stackoverflow가 나에게 이스케이프 .. lol. 두 번째 예는 다음과 같아야합니다.

c :( 이중 백 슬래시) afolder (이중 백 슬래시) aFile



2
@언어 키워드를 식별자로 사용하는 데에도 사용할 수 있으므로 제목을 명확하게 할 수 있습니다.
Joey

@unicornaddict-응 정말 같은 질문입니다. 검색 할 때 사과하지 못했습니다. @ Johannes-좋은 움직임 .. 감사합니다
Simon Rigby

Windows에서이 작업을 수행하고 Windows XP 이상을 사용하는 경우 (그래야합니다!) File file = new File ( "C : / afolder / afile"); 다른 한편으로, 더 많은 이식성을 원한다면 @CPerkins의 훌륭한 대답을보아야합니다.
Haakon Løtveit

참고 (2018 년 1 월), 원시 문자열 리터럴이 Java (JDK 10 이상) 용으로 올 수 있습니다 . Java에서 따옴표를 이스케이프하지 않고 문자열 리터럴을 작성하는 방법이 있습니까?를 참조하십시오. .
VonC

답변:


77

아니 . 문자열을 이스케이프 / 외부화하는 것이 유일한 선택입니다.


7
난 @ "문자열"더 자바에 비해 $ "문자열 {난}"매우 미래와 C # 6 사랑
귀도 모카

4
자바 C 번호에서 오는 것은 꽤 자주 많은 방법의 단계 다운
MikeKulls

33

아니요, Java에는 축어 문자열 리터럴 이 없습니다 .

당신은 자바처럼 (그리고 자바 VM 기반) 언어하려면 수행을 하지만, 당신이보고 할 수 있습니다 그루비문자열 리터럴의 다양한 형태 .


첫 번째 링크 (verbatim 문자열 리터럴)가 "Visual Studio 2003 Retired Technical documentation"을 가리키는 groovy.codehaus.org링크가 끊어졌습니다.
Vladas Maier

1
@ace : 축 어적 문자열 리터럴에 대한 섹션을 포함하는 현재 "문자열"기사로 업데이트되었습니다. Groovy 링크도 업데이트되었습니다.
Jon Skeet

16

Kent와 Jon이 말했듯이, 없습니다.

나는 당신의 특별한 경우가 있다고하더라도 일회성 프로그램 이상을 가정하는 일반적인 경우에는 나쁜 생각이 될 것이라고 지적하기 위해 대답하고 있습니다.

Java 프로그램은 Windows보다 더 많은 플랫폼에서 실행되며 다른 플랫폼에는 다른 파일 구분 기호가 있습니다. 따라서 이스케이프 된 백 슬래시를 처리하는 대신 특정 예제를 처리하는 올바른 방법은 파일 구분 기호 속성을 가져 오는 것입니다.


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

플랫폼뿐만 아니라 "afile"이 실제 파일 시스템 루트에 상대적인지 사용자의 홈 디렉토리에 상대적인지 여부에 따라 일부 정책을 기반으로 ROOTDIR을 별도로 만들었습니다.

하지만 파일 구분자 속성을 사용하면 프로그램을 더 널리 사용할 수 있습니다. 더 많은 일입니까? 예. Wanda Sykes는 "하지만 그만한 가치가 있습니다"라고 말합니다.


1
히야와 감사합니다. 내 경우에는 '파일 이름'이 관련이 없다는 사실. 내 코드는 모두 문자열을 가져 와서 전달하는 것입니다. 실제로 웹 서비스에 전달하는 것 외에는 아무것도하지 않습니다. Java에서 호출되는 ac # WCF 서비스의 응답을 테스트했습니다. 내가 테스트를 하드 코딩하고 있었기 때문에이 시점에서이 한계를 발견했습니다. 나는 실제로 문자열로 '파일 기반'을하지 않습니다.
Simon Rigby

2
축어 문자열은 정규식 패턴에 적합합니다.
고든 콩

12

현재 Java에서는 지원되지 않지만 향후 릴리스에서 사용할 수 있습니다. 2018/01/23에 JEP 326 : Raw String Literals 가 생성 되었습니다.

https://bugs.openjdk.java.net/browse/JDK-8196004 에서 진행 상황을 확인하세요.

아마도 언젠가는 다음과 같이 할 수있을 것입니다.

`c:\afolder\afile`

업데이트 : JDK에서 삭제하도록 제안 된 JEP 12 : 326 : 원시 문자열 리터럴 (미리보기) 여기에서 근거를 읽을 수 있습니다. http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

자세한 내용은 여기 https://bugs.openjdk.java.net/browse/JDK-8215682

결론 : 가까운 장래에 Java에는 축어 문자열이 없을 것입니다. 그리고 그것이 나타날지라도 오히려``가 아닐 것입니다.


1
이 문제에 대한 가장 인기있는 토론 중 하나 인 JEP 326 이 철회되었습니다. 토론은 2019 년 1 월다시 시작되었으며 현재 JDK13 릴리스에 대한 JEP 355 에서 추적됩니다 .
NPras
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.