【问题标题】:How to remove all single slashes from a string while leaving double slashes intact如何从字符串中删除所有单斜杠,同时保持双斜杠完好无损
【发布时间】:2013-09-29 08:00:05
【问题描述】:

假设您的文件中有以下文本。:

word \  sum \"span class=\\"blahblah\\">java

如果我要将文本放入字符串并使用替换方法,如下所示。 :

String text = "word \\ sum \\\"span class=\\\\\"blahblah\\\\\">java";
text = text.replace("\\", "");
System.out.println(text);

然后字符串文本将被打印为:

word   sum "span class="blahblah">java

但是,我希望双斜杠保持不变。为了只删除单斜线而保持双斜线完好无损,我会改变什么?

期望的输出:

word   sum "span class=\\"blahblah\\">java

【问题讨论】:

  • 双斜线是指两个的倍数的斜线,即“\\\\”和“\\”?
  • 你希望输出是什么?
  • 可以有三个反斜杠吗?
  • 是的,斜线是 2 的倍数(即 '\\')我想保持原样。我只想删除单斜杠('\')。首选输出是: word sum "span class=\\"blahblah\\">java

标签: java string replace


【解决方案1】:
String text = "word \\ sum \\\"span class=\\\\\"blahblah\\\\\">java";
text = text.replace("\\\\", "#$%"); // replace '\\' by something unique
text = text.replace("\\", "");//remove the '\'
text = text.replace("#$%", "\\\\");//get '\\' back

【讨论】:

  • 这不会编译:第 3 行无效
【解决方案2】:

查找正则表达式 Lookahead 和 Lookbehind 模式。

http://www.regular-expressions.info/lookaround.html

请记住,后视在 Javascript 中不起作用。

【讨论】:

    【解决方案3】:

    试试这个

        text = text.replaceAll("(?<!\\\\)\\\\(?!\\\\)", "");
    

    【讨论】:

    • 好一个,虽然这不能从三个斜杠中删除一个斜杠
    • 我同意,但没有要求 3+ 斜线
    • 是的,我只想指出@EJP 在问题 cmets 中的评论。
    【解决方案4】:

    这将从任何奇数长度的连续反斜杠中删除一个反斜杠:

    text.replaceAll("(?<!\\\\)(\\\\\\\\)*\\\\(?!\\\\)","$1")
    

    所以在

    的情况下
    text = "word \\ sum \\\"span class=\\\\\"blah\\\\\\\"blah\\\\\">java"
    

    或打印时:word \ sum \"span class=\\"blah\\\"blah\\"&gt;java,结果为:

    单词总和 "span class=\\"blah\\"blah\\">java

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 2015-03-28
      • 2017-04-30
      • 2018-07-26
      • 1970-01-01
      相关资源
      最近更新 更多