@가있는 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.