我需要在打印出来之前从字符串中删除引号。
我编写了一个函数,使用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“
任何想法如何正确地做到这一点?
由于
答案 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。在你的情况下,正则表达式会更慢,并且需要甚至更多的反斜杠。
replaceAll
与replace
一起使用,即在这种情况下CharSequence
s存在于Java 1.5以后。
String
答案 2 :(得分:1)
Java提供了易于使用的方法来转义正则表达式和替换:
public static String escapeQuotes(String myString) {
return myString.replaceAll(Pattern.quote("\""), Matcher.quoteReplacement("\\\""));
}