java字符串replaceAll";至\ \“;
我想替换“in my string to\\”以供Javascript JSON.parse(…)以后使用,我尝试以下测试java字符串replaceAll";至\ \“;,java,replaceall,Java,Replaceall,我想替换“in my string to\\”以供Javascript JSON.parse(…)以后使用,我尝试以下测试 String name = "\"ab\"c"; System.out.println("name before escape="+name); String name1 = name.replaceAll("\"", "\\\""); System.ou
String name = "\"ab\"c";
System.out.println("name before escape="+name);
String name1 = name.replaceAll("\"", "\\\"");
System.out.println("name1="+name1);
String name2 = name.replaceAll("\"", "\\\\\"");
System.out.println("name2="+name2);
String name3 = name.replaceAll("\"", "\\\\\\\"");
System.out.println("name3="+name3);
结果如下:
name before escape="ab"c
name1="ab"c
name2=\"ab\"c
name3=\"ab\"c
所以都失败了,我不理解输出结果
System.out.println("name4=" + name.replaceAll("\"", Matcher.quoteReplacement("\\\\\"")));
尽管我对它的工作原理感到迷惘…不要使用
replaceAll
,使用replace
:name.replace(“\”,“\\\”);
原因是replaceAll
使用regex,它会弄乱所有格式
主类{
公共静态void main(字符串[]args){
字符串名称=“\”ab\“c”;
字符串名称1=name.replace(“\”,“\”);
System.out.println(name1);//Prints:\\“ab\\”c
}
}
最好使用replace()
而不是replaceAll()
:
输出:
name before escape="ab"c
name1=\\"ab\\"c
使用replaceAll需要转义\and“
String name=“\”ab\“c”;
System.out.println(“转义前的名称=”+name);
String name1=name.replaceAll(“\\\”,“\\”);
System.out.println(“name1=“+name1”);
不要构建自己的JSON。使用一个库。我们这里有很多关于堆栈溢出的JavaScript问题,询问如何修复格式错误的JSON(这通常几乎是不可能的)因为他们从中获取的源代码没有正确编码。请不要犯这样的错误。另外,您确切想要的输出是什么?@ivar任何库推荐?@OlivierGrégoire我想要的输出是\\“ab”\\“cYou可以使用Jackson、Gson或JSON java。如果您只想编码一个字符串,那么您可以使用它。但是如果它是更大的JSON的一部分,那么您也可以。但是如果我想使用replaceAll,那么如何编写?以及如何解释我问题中name1、name2和name3的结果?不,这个输出name1=\\\\\\\\\\\\\\\\\\\\\\\\”c必须更新答案,name.replaceAll(“\\\”,“\\\”)但是可以解释为什么会这样做吗?有9个反斜杠,前三个\\\,因为\在java和regex中有特殊的含义,所以一个反斜杠需要在esapce中再添加两个反斜杠,所以从左到右,前六个反斜杠输出\\,但是如何解释剩余的第七、第八、第九个反斜杠加上双引号\\\“?2 string和regex string中的escape。string定义“\\\\\\\\\\\\\\\\\\\”、\“->”,所以原始字符串是\\\\\”。在regex string中也需要escape,所以\\->,\“->”,所以它是\\“第一个是java escape,所以第二个反斜杠意味着一个反斜杠,第三、第四、第二、第五、第六、第七、第八个是剩余的\”“,所以原始字符串是四个反斜杠加上一个双引号\\\”,然后在正则表达式中,第一个反斜杠和第二个反斜杠输出一个反斜杠,第三个、第四个反斜杠输出第二个反斜杠,所以becomes\\“你是说这个吗?
name before escape="ab"c
name1=\\"ab\\"c