2012-09-13 2 views
0

모든 공백을 "_"로 바꾸어서 문자열을 변환하고 실제 문자열에 "_"이 있으면 "\ _"로 변환 중입니다. "this is test _string"과 같은 문자열이 있으면 "this_is_test _ \ _ string"이됩니다. 이제 자바 정규식을 사용하여 원래 문자열 "this is test _string"을 얻고 싶습니다. 자바 정규식을 사용하여 달성 할 수 있습니까? 제발 도와주세요.자바 정규식 사용

+5

이다 지금까지 시도 무엇?] (http://www.whathaveyoutried.com) – Baz

답변

7

아니오, "\\_""_" 또는 "\\ "인지 여부를 모호하게하는 백 슬래시를 이스케이프 처리하지 않았으므로 원래 문자열을 되돌릴 수 없습니다. 당신이

  1. "\\_"
  2. "_"의 모든 항목을 교체 "\\\\"
  3. "\\"의 모든 항목을 교체 한 후 "_"

당신이 할 수와 " "의 모든 항목을 교체했던 경우

토큰을 찾아 프로세스를 역으로 수행하십시오. "\\\\", "\\_", "_" 왼쪽에서 오른쪽으로 한 번에 전달합니다. 자바에서 먼저 변환

stringToEncode.replace("\\", "\\\\").replace("_", "\\_").replace(" ", "_") 

이며, 이중이

String decode(String stringToDecode) { 
    int n = stringToDecode.length(); 
    StringBuilder out = new StringBuilder(n); 
    int decoded = 0; 
    for (int i = 0; i < n; ++i) { 
    switch (stringToDecode.charAt(i)) { 
     case '\\': 
     out.append(stringToDecode, decoded, i); 
     decoded = ++i; 
     break; 
     case '_': 
     out.append(stringToDecode, decoded, i).append(' '); 
     decoded = i+1; 
     break; 
    } 
    } 
    return decoded != 0 
     ? out.append(stringToDecode, decoded, n).toString() 
     : stringToDecode; 
} 
+1

I 문자열 "this is _test"에 대해 시도했으나 인코딩 된 문자열은 "this_is _ \\ _ test"가 제외되었습니다. 그러나 디코딩 된 문자열은 "This is \ test"입니다. 결과는 잘못된 문자열입니다. – Mojoy

+0

@Senthilnathan, 네. 오버랩이 있기 때문에 디코딩은 입력의 간단한 스왑 및 리버스가 아닙니다. 편집 할 것입니다. –