java中的转义引用函数无法正常工作

时间:2010-11-11 16:27:48

标签: java escaping quotes

我需要在打印出来之前从字符串中删除引号。

我编写了一个函数,使用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 \“

然而,我得到的是: ASD” ASD“

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

由于

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

您还需要将\转换为\\,否则原始字符串中的任何\将保留\和解析器,认为是特殊字符(例如{{ 1}})必须遵循"才会感到困惑。

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

您希望使用\而非replace,因为前者处理字符串,后者使用regexp。在你的情况下,正则表达式会更慢,并且需要甚至更多的反斜杠。

replaceAllreplace一起使用,即在这种情况下CharSequence s存在于Java 1.5以后。

String

答案 2 :(得分:1)

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

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