在特定字符前面的字符串中插入字符

时间:2014-03-31 08:51:19

标签: java

我需要更改一个字符串如下: 在任何已建立的特殊字符之前添加“\”,例如: 如果string = $ {Name},结果应为===> \ $ {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\} 

我真的很困惑,任何想法都会受到赞赏。

4 个答案:

答案 0 :(得分:4)

试试这个:

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未得到充分利用,即使这是迭代String个字符的最佳方式!)


如果您使用Guava 15+,您也可以编写自己的CharEscaper;像Guava一样,它的效果非常好!

答案 1 :(得分:1)

如果您只想逃避任何特殊字符,请尝试使用Apache Commons中的StringEscapeUtils

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

答案 2 :(得分:0)

尝试使用String.replaceAll()

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

输出:

\${Name}

答案 3 :(得分:-2)

尝试使用replaceAll函数

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;
}