字符串操作 - 任何其他有效方式?

时间:2011-02-03 17:25:55

标签: java string

我有一个要求,我需要在给定的字符串变量中插入转义序列,在单引号(')出现的地方。我尝试使用拆分方法以及 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;
}

5 个答案:

答案 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();