日期:2014-05-20  浏览次数:21025 次

java字符串中将"替换成\"输出,如何解决.
字符串中包含双引号字符,要经过转化将双引号替换为反斜杠加双引号,并输出.
例如:
af"fd"fase
转换后输出
af\"fd\"fase
我用的字符串类的replaceAll("\"","\\\"")方法,为什么反斜杠不输出?
结果还是
af"fd"fase
Java 字符串 正则表达式 转义字符

------解决方案--------------------
String str = "asdfa\"asdfasdf\"asdfasdf\"";

str = str.replaceAll("\"",Matcher.quoteReplacement("\\\""));

System.out.println(str);

replaceAll第二个参数要是有正则的特殊字符的话,会引起问题的。
------解决方案--------------------

replaceAll
public String replaceAll(String regex,
                         String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 
调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同: 

Pattern.compile(regex).matcher(str).replaceAll(repl)
注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。 


参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换每个匹配项的字符串 
返回:
所得 String 
抛出: 
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始: 
1.4 
另请参见:
Pattern

------解决方案--------------------

import java.util.regex.*;


public class Test01 {
public static void main(String[] args){
  Pattern p = Pattern.compile("\"");
  Matcher m = p.matcher("af\"fd\"fase");
  p(m.replaceAll("\\\\\""));
}

public static void p(Object obj){
System.out.println(obj);
}
}



System.out.println("af\"fd\"fase".replaceAll("\"","\\\\\""));



af\"fd\"fase

------解决方案--------------------
引用:
引用:
replaceAll
public String replaceAll(String regex,
                         String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 
调用此方法的 str.replaceAll(regex, repl) 形……




主要是replaceAll这个函数在作怪,在这个函数的执行过程中,还要将斜杠做一次转义处理
也就是"\\"传到replaceAll里面后,会变成"\",在它里面,又会将"\"当成转义字符

比如replaceAll("\\","4"); 在当前java代码里,"\\" = \

传到函数replaceAll里面后,就变成了"\", 它也把"\"当成是一个字符串,而这个字符串是无法识别的,就会报错

综上,应该这样写:
String s="af\\fd\\fase";
System.out.println(s.replaceAll("\\\\","\\\\\\\\"));