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

R K*_*R K 3 java string

我有一个要求,我需要在给定的字符串变量中插入一个转义序列,在出现单引号(')的地方.我尝试使用split方法和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;
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*oyd 7

这个怎么样:

newMessage.replace("'", "\\'")
Run Code Online (Sandbox Code Playgroud)

或者我是否误解了你的要求?


而有关意见的讨论:是的,都replace()replaceAll() 使用正则表达式内部使用编译模式(但replace()使用标志Pattern.LITERAL),解释的图案文字值,而replaceAll()(和replaceFirst())都使用正则表达式.但是,编译的模式完全相同(在这种情况下).亲自尝试一下:

Pattern literal = Pattern.compile("'",Pattern.LITERAL);
Pattern regular = Pattern.compile("'");
Run Code Online (Sandbox Code Playgroud)

在这些分配之后添加断点,并仔细查看这两个编译模式.您会发现它们的所有字段值都是相同的,因此至少在这种情况下,不会在性能方面产生任何差异.