2014-03-31 2 views
1

다음과 같이 문자열을 변경해야합니다. 발견 된 특수 문자 앞에 "\"를 추가하십시오. 예 : string = $ {Name} 인 경우 결과는 다음과 같아야합니다.특정 문자 앞의 문자열에 문자 삽입

private static String getFormattedString(String variable) { 
    char [] specialCharacters = {'.', '\\', '+', '*', '?', '[', '^', ']', '$', '(', ')' ,'{' ,'}', '=', '!', '<', '>', '|', ':', '-'}; 
    String old = variable; 
    String formatted = ""; 
    int i=0; 
    while(i<old.length()) { 
    for (int j=0;j<specialCharacters.length;j++) { 

if (old.charAt(i) == specialCharacters[j]) { 
    formatted+=old.substring(0, i)+"\\"+old.substring(i, i+1); 
    old=variable.substring(i+1,variable.length()); 
    break; 
} 
    } 
    i++; 
} 
return formatted; 
} 

하지만 잘못된 결과를 얻고있다 :

Formatted String : ++++> \${NAME\} 

내가 어떤 생각 것 정말 혼란 스러워요을 ===> \ $ {NAME}

내가 쓴 감사하겠습니다.

+4

를 사용하는 특수 문자 목록에 {'및'}'? –

+1

... 그리고'{'와'} '가 특수 문자 목록에 있으므로 구현에 버그가 있습니다. 첫 번째'{'를 벗어나지 않습니다. – Seelenvirtuose

+0

@Seelenvirtuose "처음으로 도망 가지 않는다 {네, 이것이 내 문제입니다. 감사합니다. – AmiraGL

답변

4

이가 시도 String 님의 문자를 반복합니다.)


Guava 15+를 사용하는 경우 자신의 CharEscaper을 작성할 수도 있습니다. 모든 것을 구아바처럼 훌륭하게 잘 작동합니다! 와

+0

감사합니다. 구아바도 확인해 보겠습니다.) – AmiraGL

+1

@AmiraGL 예, _do_ 구아바 확인 ... 결국 당신은 그것을 할 수 없다는 것을 알게 될 것입니다 : p – fge

1

그냥 특수 문자를 탈출하려면, 아파치 코 몬즈에서 StringEscapeUtils를 사용해보십시오 : 그것은 가장 좋은 방법 임에도 불구하고,

private static final List<Character> SPECIAL = Arrays.asList('.', /* etc */); 

public static String escape(final String input) 
{ 
    final StringBuilder sb = new StringBuilder(input.length()); 
    final CharBuffer buf = CharBuffer.wrap(input); 
    char c; 

    while (buf.hasRemaining()) { 
     c = buf.get(); 
     if (SPECIAL.contains(c)) 
      sb.append('\\'); 
     sb.append(c); 
    } 

    return sb.toString(); 
} 

(CharBuffer 과소된다

import org.apache.commons.lang.StringEscapeUtils; 
(...) 
    String result = StringEscapeUtils.escapeJava(variable); 
0

시도 String.replaceAll()

String strgg = "${Name}"; 
System.out.println(strgg.replaceAll("\\$", "\\\\\\$")); 

출력 : 당신은 그냥`왜 당신이 가진 마십시오`$ '를 탈출하려면

\${Name} 
-2

시도는 완전히 대체 기능

private static String getFormattedString(String variable) { 
    //No need this. 
    // char [] specialCharacters = {'.', '\\', '+', '*', '?', '[', '^', ']', '$', '(', ')' ,'{' ,'}', '=', '!', '<', '>', '|', ':', '-'}; 
    variable = variable.replaceAll(".","\\."); //same for all. 
    variable = variable.replaceAll("+","\\+");. 
    variable = variable.replaceAll("*","\\*"); 
return formatted; 
} 
+0

먼저 \\를 벗어나고, 그때. –

+0

AmiraGL이 요청한대로 이것이 작동 할 것이라고 확신합니다. –

+0

작동하지 않습니다. 1. 문자열은 변경 불가능합니다. 2. .replaceAll()에 대한 첫 번째 인수는 정규 표현식입니다. – fge