【问题标题】:Escape quote function in java not workingjava中的转义引号功能不起作用
【发布时间】:2011-05-08 14:02:23
【问题描述】:

在打印出来之前,我需要从字符串中转义引号。

我编写了一个函数,使用 char 数组尽可能明确。但是这个函数似乎只是打印出它自己的输入:

public static String escapeQuotes(String myString) {
 char[] quote=new char[]{'"'};
 char[] escapedQuote=new char[]{'\\' , '"'};
 return myString.replaceAll(new String(quote), new String(escapedQuote));
}

public static void main(String[] args) throws Exception {
 System.out.println("asd\"");
 System.out.println(escapeQuotes("asd\""));
}

我希望它的输出是: ” asd\"

但是我得到的是: ” asd"

任何想法如何正确地做到这一点?

谢谢

【问题讨论】:

标签: java escaping quotes


【解决方案1】:

我会尝试replace 而不是replaceAll。第二个版本是为正则表达式设计的,AFAIK。

编辑
来自 replaceAll 文档
请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同
所以,第二个参数中的反斜杠是个问题。

文档的直接链接
http://download.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String, java.lang.String)

【讨论】:

  • 我正要发布它,但后来看到:replace() “返回一个新字符串,该字符串是用 newChar 替换此字符串中所有出现的 oldChar 所产生的。”那么replace和replaceAll之间的唯一区别是一个使用reg ex?什么鬼?
  • @Jere 我认为,结果字符串中的美元符号和反斜杠用于表示“正则表达式变量”。我已经用文档中的引用更新了答案。
【解决方案2】:

您还需要将\ 转义为\\ 否则原始字符串中的任何\ 将保留\ 和解析器,认为特殊字符(例如")必须跟随\会糊涂的。

您放入 Java 文字字符串的每个 \" 字符都需要以 \ 开头。

您想使用replace 而不是replaceAll,因为前者处理字符串,后者处理正则表达式。在您的情况下,正则表达式会更慢,并且需要更多个反斜杠。

replaceCharSequences 一起使用,即在这种情况下 Strings 从 Java 1.5 开始就存在。

myString = myString.replace("\\", "\\\\");
myString = myString.replace("\"", "\\\"");

【讨论】:

    【解决方案3】:

    Java 提供了用于转义正则表达式和替换的现成方法:

    public static String escapeQuotes(String myString) { 
      return myString.replaceAll(Pattern.quote("\""), Matcher.quoteReplacement("\\\"")); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2021-05-23
      • 2010-10-20
      • 2014-04-27
      • 2015-05-29
      • 2021-01-17
      • 1970-01-01
      相关资源
      最近更新 更多