V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tamamaxox
V2EX  ›  Java

为什么我要在字符串中“或者‘前面添加一个/要这样写?

  •  
  •   tamamaxox · 2015-05-20 17:26:06 +08:00 · 3481 次点击
    这是一个创建于 3508 天前的主题,其中的信息可能已经有所发展或是发生改变。
    public static String stringInJs(String str){
    return str.replaceAll("\"","\\\\\"").replaceAll("\'","\\\\\'");
    }
    第 1 条附言  ·  2015-05-20 20:26:42 +08:00
    我意思是,为什么是5个斜杠而不是3个
    10 条回复    2015-05-21 23:36:25 +08:00
    dallaslu
        1
    dallaslu  
       2015-05-20 17:40:16 +08:00   ❤️ 1
    str.replaceAll("\u22","\u2f\u22");
    yangg
        2
    yangg  
       2015-05-20 17:57:31 +08:00
    因为你不该用java输出到js里。
    northisland
        3
    northisland  
       2015-05-20 18:06:12 +08:00
    基本功啦,去看看转义吧
    tamamaxox
        4
    tamamaxox  
    OP
       2015-05-20 20:32:28 +08:00 via Android
    @northisland 我觉得你没有看清楚我的题目,我当然知道要转义了
    Gonster
        5
    Gonster  
       2015-05-20 20:38:03 +08:00
    所以到底是除号还是斜杠。。
    Gonster
        6
    Gonster  
       2015-05-20 21:32:48 +08:00   ❤️ 1
    @tamamaxox 是转成斜杠吧(标题错了)?去看了一下java源码,确实感觉有点反人类
    java.util.regex.Matcher.appendReplacement 是在 replaceAll 中调用的一个用来替换拼合最终结果字符串的,中间会对$和\做不同的操作,具体还是看源码吧(- 。- 我还没看完)。。
    用Matcher的quoteReplacement方法处理字符串以后比较能理解。。
    str.replaceAll("\"",Matcher.quoteReplacement("\\\“"))
    Gonster
        7
    Gonster  
       2015-05-20 21:42:16 +08:00   ❤️ 1
    对了 还有就是String 的 replace 和 replaceAll 两个方法参数也挺坑的,第一个参数 replace 的不是正则,replaceAll 的是正则

    我决定去啃一遍文档 = 、=

    对了还有我楼上 \\\" 最后的引号打成中文的了
    Gonster
        8
    Gonster  
       2015-05-20 22:22:32 +08:00   ❤️ 1
    @tamamaxox _(:з」∠)_ 好吧 我发现我除号反斜杠也傻傻分不清楚

    看完总的来说就是 replaceAll 第二个参数 replacement 在替换时也是包含两种特殊处理的, replacement 字符串中的 ${name} 或 $g 的格式会按正则捕捉的组名称或编号替换后在append入最终字符串,replacement中的字符 "\\" 会被认为是对后面字符进行转义, 添加会被直接丢弃掉,然后直接 append 后面那个字符, 比如replacement是 "\\\\" ,那么会先丢弃前一个"\\" , 然后append 后一个字符 也就是 "\\", 如果replacement是"\\\\\\" , 那么会出现越界异常。。。越界异常。。异常 。。。
    tamamaxox
        9
    tamamaxox  
    OP
       2015-05-21 09:59:40 +08:00
    @Gonster 太谢谢了,我回头细琢一下。
    zonghua
        10
    zonghua  
       2015-05-21 23:36:25 +08:00 via iPhone
    去转义
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:44 · PVG 05:44 · LAX 13:44 · JFK 16:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.