我需要更改一个字符串如下: 在任何已建立的特殊字符之前添加“\”,例如: 如果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\}
我真的很困惑,任何想法都会受到赞赏。
答案 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;
}