我有一个要求,我需要在给定的字符串变量中插入转义序列,在单引号(')出现的地方。我尝试使用拆分方法以及 StringTokenizer ,但我都没有尝试过。所以我开发了下面提到的逻辑。它在一些场景中也失败了
任何人都可以为我提供最简单的方法来实现这样的要求吗?
public static String quotesMessage(String message){
String newMessage="";
while(message.length()>0){
if(message.indexOf("'")==0){
if(!StringUtils.isEmpty(message.substring(0))){
message = message.substring(1);
}
}else{
if(message.indexOf("'")!= -1){
newMessage=newMessage+message.substring(0,message.indexOf("'"))+"\\'";
message=message.substring(message.indexOf("'"));
}else{
newMessage=newMessage+message;
message="";
}
}
}
return newMessage;
}
答案 0 :(得分:7)
怎么样:
newMessage.replace("'", "\\'")
或者我是否误解了你的要求?
关于评论中的讨论:是的,replace()
和replaceAll()
都使用正则表达式在内部使用已编译的模式(但replace()
使用标记{{ 3}}),将模式解释为文字值,而replaceAll()
(和replaceFirst()
)都使用正则表达式。但是,编译的模式完全相同(在这种情况下)。亲自尝试一下:
Pattern literal = Pattern.compile("'",Pattern.LITERAL);
Pattern regular = Pattern.compile("'");
在这些分配后添加断点,并仔细查看这两个编译模式。您会发现它们的所有字段值都是相同的,因此至少在这种情况下,不会在性能方面产生任何差异。
答案 1 :(得分:1)
使用replaceAll
方法:
myString.replaceAll("'", "\\'");
答案 2 :(得分:1)
我会使用StringBuilder对象而不是手动连接字符串。如果你的字符串很大,至少你会得到一些性能提升。
答案 3 :(得分:1)
message = message.replaceAll("'", "");
答案 4 :(得分:1)
String in = ...
StringBuilder out = new StringBuilder(in.length() + 16);
for (int i=0; i<in.length(); i++) {
char c = in.charAt(i);
if (c == '\'') {
out.append("\\'");
} else {
out.append(c);
}
}
String result = out.toString();