java中的转义引号函数不起作用

java中的转义引号函数不起作用,java,escaping,quotes,Java,Escaping,Quotes,我需要先从字符串中转义引号,然后再打印出来 我已经编写了一个函数,使用字符数组尽可能显式。但这个函数所做的只是打印出自己的输入: public static String escapeQuotes(String myString) { char[] quote=new char[]{'"'}; char[] escapedQuote=new char[]{'\\' , '"'}; return myString.replaceAll(new String(quote), new Strin

我需要先从字符串中转义引号,然后再打印出来

我已经编写了一个函数,使用字符数组尽可能显式。但这个函数所做的只是打印出自己的输入:

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“

有没有办法正确地做到这一点


谢谢

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

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

文档的直接链接

,java.lang.String)

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

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

文档的直接链接

您还需要将
\
转义到
\
中,否则原始字符串中的任何
\
都将保留
\
,解析器会认为一个特殊字符(例如
)必须跟在
\
后面,因此会混淆

放入Java文本字符串中的每个
\
字符都需要在
\
前面

您希望使用
replace
而不是
replaceAll
,因为前者处理字符串,后者处理regexp。在您的情况下,regexp会更慢,并且需要更多的反斜杠

replace
CharSequence
s一起使用,即
String
s在本例中从Java 1.5开始就存在

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

您还需要将
\
转义到
\
中,否则原始字符串中的任何
\
都将保留
\
,并且解析器会认为一个特殊字符(例如
)必须跟在
\
后面,这将导致混淆

放入Java文本字符串中的每个
\
字符都需要在
\
前面

您希望使用
replace
而不是
replaceAll
,因为前者处理字符串,后者处理regexp。在您的情况下,regexp会更慢,并且需要更多的反斜杠

replace
CharSequence
s一起使用,即
String
s在本例中从Java 1.5开始就存在

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

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

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

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

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

我正要发布它,但后来看到:replace()“返回一个新字符串,该字符串是将该字符串中所有出现的oldChar替换为newChar后生成的。”所以replace和replaceAll之间的唯一区别是使用reg ex?怎么回事?@Jere我想,结果字符串中的美元符号和反斜杠被用来表示“regex变量”。我已经用文档中的一个引号更新了答案。我正要发布这个答案,但后来看到:replace()“返回一个新字符串,该字符串中所有出现的oldChar都替换为newChar。”所以replace和replaceAll之间的唯一区别是使用reg-ex?怎么回事?@Jere我想,结果字符串中的美元符号和反斜杠被用来表示“regex变量”。我已经用文档中的引用更新了答案