如果我有一个字符串变量:
String example = "Hello, I'm here";
我想在变量
内的每个
'
和
"
前面添加一个转义字符(即not实际上转义字符),我该怎么做?
我并不是在这里声称优雅,但我认为它做了你想要它做的事情(如果我错了,请纠正我):
public static void main(String[] args)
{
String example = "Hello, I'm\" here";
example = example.replaceAll("'", "\\\\'");
example = example.replaceAll("\"", "\\\\\"");
System.out.println(example);
}
输出
Hello, I\'m\" here
对于其他想要更通用的转义解决方案的人来说,您可以在 Apache Commons Text 库上构建自己的转义器。看一下 StringEscapeUtils 的例子:
import java.util.Map;
import org.apache.commons.text.translate.CharSequenceTranslator;
import org.apache.commons.text.translate.LookupTranslator;
public final class CustomEscaper {
private static final CharSequenceTranslator CUSTOM_ESCAPER =
new LookupTranslator(
Map.of(
"+" , "\\+",
"-" , "\\-",
// ...
"\\", "\\\\"
)
);
private CustomEscaper() {
// hide
}
public static final String escape(String input) {
return CUSTOM_ESCAPER.translate(input);
}
}
System.out.println(StringEscapeUtils.escapeCsv("a\","));
System.out.println(StringEscapeUtils.escapeJson("a\","));
System.out.println(StringEscapeUtils.escapeEcmaScript("Hello, I'm \"here"));
结果:
"a"","
a\",
Hello, I\'m \"here
如果只有一个引号那么简单,但如果是双引号则像这样使用
eachClientName = eachClientName.replaceAll("'","\\\'");
eachClientName =eachClientName.replaceAll("\"","\\\\\"");