简体   繁体   English

java 字符串替换所有“到 \\”

[英]java String replaceAll “ to \\”

I want to replace " in my string to \\" for later use by Javascript JSON.parse(...), I try the following test我想将我的字符串中的“替换为\\”以供Javascript JSON.parse(...)以后使用,我尝试以下测试

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);

and result as follow:结果如下:

name before escape="ab"c
name1="ab"c
name2=\"ab\"c
name3=\"ab\"c

so all fail, and I don't understand the output result所以都失败了,我不明白 output 结果

  1. why name2 and name3 are the same?为什么name2和name3是一样的?
  2. how to replace all " to \\"如何将所有“替换为\\”

[Update1} [更新1}

for question 2, I found the following work对于问题2,我发现了以下工作

System.out.println("name4=" + name.replaceAll("\"", Matcher.quoteReplacement("\\\\\"")));

Although I feel lost for the reason it works...虽然我因为它起作用的原因而感到迷茫......

It's better to use replace() instead of replaceAll() :最好使用replace()而不是replaceAll()

String name = "\"ab\"c";
System.out.println("name before escape=" + name);
System.out.println("name1=" + name.replace("\"", "\\\\\""));

Output: Output:

name before escape="ab"c
name1=\\"ab\\"c

Don't use replaceAll , use replace : name.replace("\"", "\\\"");不要使用replaceAll ,使用replacename.replace("\"", "\\\""); The reason is that replaceAll uses regex and it can mess all your formatting up.原因是replaceAll使用正则表达式,它会弄乱你所有的格式。

class Main {
  public static void main(String[] args) {
    String name = "\"ab\"c";
    String name1 = name.replace("\"", "\\\\\"");
    System.out.println(name1); // Prints: \\"ab\\"c
  }
}

use replaceAll need to escape \ and "使用 replaceAll 需要转义 \ 和 "

String name = "\"ab\"c";
System.out.println("name before escape="+name);
String name1 = name.replaceAll("\\\"", "\\\\\\\\\"");
System.out.println("name1="+name1);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM