2015-01-09 4 views
1

명령 줄 스크립트를 작성했으며 java을 사용하여 테스트하고 있습니다.문자열에서 큰 따옴표를 이스케이프 처리하지 마십시오.

명령 줄에서 다음과 같이 씁니다. script -html="anchor bold" 자바 코드를 사용하여 동일한 코드를 테스트하는 동안 정확히 어떻게 문자열을 윤곽 표시해야합니까?

-html=anchor bold" 따옴표 포함 얻을 해달라고대로 작동하지 않습니다 그래서 내 테스트는

-html=\"anchor bold\"이 따옴표를 탈출하지만 난 그것을 원하지 실패합니다.

-html=\\\"anchor bold\\\"이 결과는 -html=\"anchor bold\"입니다.하지만 슬래시는 원하지 않습니다.

String[] 배열을 사용하여 명령을 실행하고 있습니다.

new String[] { "--path=" + p, 
       "--user=" + user, 
       "--html=\"anchor bold\"", 
       "--port=8081" 
      } 

명령 줄 인수는 다음과 같습니다

path/executeScript --path=path1 --user=testUser --html="anchor bold" --port=8081 
+0

시도 : -html = ' "대담한 앵커"'이중 작은 따옴표 사이의 공간없이 . 나는 당신이 무슨 일이 일어 났는지 말할 수 있도록 그냥 간격을 두었습니다. – jordaniac89

+0

더 자세한 정보가 있습니까? 클래스에서'-html = "anchor bold"를 어떻게 사용합니까? 스크립트 세부 정보를 보여주십시오. – ToYonos

+0

@ToYonos 추가 세부 사항을 확인하십시오. – fscore

답변

11

따옴표가 포함 된 매개 변수를 사용하여 스크립트를 Java로 테스트하려면 선택 사항이 없으므로 이스케이프 처리해야합니다.

String[] command = new String[] { 
    "path/executeScript", 
    "--path=" + p, 
    "--user=" + user, 
    "--html=\"anchor bold\"", 
    "--port=8081" 
} 
Runtime.getRuntime().exec(command); 

기술 설명 : https://stackoverflow.com/a/3034195/2003986

+0

왜 나는 선택의 여지가없고 큰 따옴표를 벗어나야합니까? – fscore

+0

Java가 작동하는 방식입니다. 기술적 인 설명은 다음과 같습니다. http://stackoverflow.com/a/3034195/2003986 – ToYonos

+0

ok 기술적 인 설명을 이해하지만 제 경우에는 어떻게 그런 상황을 테스트합니까? – fscore

2

다음, 당신이 리터럴 문자로 사용할 것을 앞에 이스케이프 문자를 사용하여 평소와 같이 주위에 따옴표를 넣어.

script -html="\"anchor bold\"" 
4

리터럴 문자열, 그것을 할 수있는 유일한 방법을 선언하려면 문자열의 문자를 둘러싼 큰 따옴표입니다. 이처럼 다음 Java Language Specifications §3.10.5에서

"String Characters" 
... String Characters 

:

문자 따옴표로 묶인 0 개 이상의 문자으로 구성된 문자열입니다. 문자는 이스케이프 시퀀스 (§3.10.6)로 나타낼 수 있습니다. U + 0000 ~ U + FFFF 범위의 문자에 대해 하나의 이스케이프 시퀀스, U + 010000 ~ U + 10FFFF 범위의 UTF-16 서로 게이트 코드 단위에 대한 두 개의 이스케이프 시퀀스 .

StringLiteral: " {StringCharacter} " StringCharacter: InputCharacter but not " or \ EscapeSequence
EscapeSequence 정의에 대해서는 §3.10.6을 참조하십시오.

[...] 문자열 리터럴의

다음은 예 :

""     // the empty string 
"\""     // a string containing " alone 
"This is a string" // a string containing 16 characters 
"This is a " +  // actually a string-valued constant expression, 
    "two-line string" // formed from two string literals 

따옴표를 이스케이프하는 것은 컴파일 시간 구문 요구 사항이기 때문에, 당신은를 탈출해야한다 String 리터럴의 큰 따옴표

당신은 유니 코드 문자 위해 시도 할 수 있지만, 내가보기 엔 의심의 여지 (스포일러 : 그것은하지 않습니다) 컴파일러가 그것을 받아 들일 것이다 :

"--html=\"anchor bold\""— Right

:

"--html=\u0022anchor bold\u0022"— Wrong

은 탈출을 사용하여 그 중 컴파일러는 다음과 같이 처리합니다.

... --html="anchor bold" 

는 참조 :

0

내가 문자를 사용하여 .. 생각할 수있는 방법입니다.

"--html=" + '"' + "anchor bold" + '"' 
+0

아쉽게도'String + char' 연결 프로세스는'char'를 암시 적으로'int'로 내 보냅니다. 이 경우'''는'22'가되어'--html = 22anchor bold22'가됩니다. – Unihedron

+0

'System.out.println (' "'+"string "+" " '); '그것은 다음을 출력합니다 :''string "'... 22string22가 아닙니다. – Bubletan

관련 문제