【问题标题】:How to replace 'n' back slashes (\) with one?如何用一个替换'n'反斜杠(\)?
【发布时间】:2016-12-01 15:12:11
【问题描述】:

我想将 'n' 个斜线挤出成 1,其中 n 不固定。

例如:

String path = "Report\\\\\\n"; 

预期输出:"Report\\n"

我尝试了以下方式

System.out.println(path.replaceAll("\\+", "\");

但它正在打印"Report\\\n"

我无法减少更多。

所有与固定斜杠数量相关的问题/答案。

有什么通用方法可以将所有反斜杠压缩为一个吗?

【问题讨论】:

标签: java regex replace


【解决方案1】:

如果你打印path,你会得到:

Report\\\n

那是因为\ 应该被引用并且在Java 中写成\\

你应该这样做:

System.out.println(path.replaceAll("\\\\+", "\\\\"));

说明:

在(纯)正则表达式中,为了匹配 literal \,您应该引用它。所以表示为:

\\

在 Java 中,\ 表示为 \\,简单的数学应该可以解释 4 个\s。

【讨论】:

  • @Codebender 因为"\" 不起作用,因为编译器会认为你引用了"。你需要双引号。
  • 你是对的。看起来第二个参数也应该与正则表达式兼容。不知道。
  • @MarounMaroun 你能解释一下逻辑吗?
  • @nantitv 30 分钟后我会到家,我会解释我的答案。
  • @MarounMaroun 我明白了。这有一个很好的解释stackoverflow.com/questions/4025482/…
【解决方案2】:

你必须逃跑。很多。

System.out.println("Report\\\\\\n");
System.out.println("Report\\\\\\n".replaceAll("[\\\\]+", "\\\\"));

打印出来:

Report\\\n
Report\n

【讨论】:

    【解决方案3】:

    您可以使用两种方法 indexOf() 和 lastIndexOf() 来获取字符串 '\\....' 的实际开始和结束索引 然后简单地使用 substring 方法获取 substring。

    【讨论】:

      【解决方案4】:

      您只需要字符串中“\”的第一个和最后一个位置。然后创建一个没有这些位置之间信息的字符串。

      int firstIndex = path.indexOf("\\");
      int lastIndex = path.lastIndexOf("\\");
      String result = path.substring(0, firstIndex) + path.substring(lastIndex, path.length());
      

      【讨论】:

        【解决方案5】:

        要使用单个正斜杠替换多个正斜杠,您可以使用:

        .replaceAll("(?)[//]+", "/"); 
        

        要使用单个反斜杠替换多个反斜杠,您可以使用:

        .replaceAll("(?)[\\\\]+", "\\\\");
        

        【讨论】:

        • 为什么我的帖子是-1,我尝试了我的代码并且它有效。 (我也是第一个发帖的人之一...... :-S)对我的帖子投反对票的人至少可以解释一下为什么它会是一个否定的答案。
        猜你喜欢
        • 2014-09-09
        • 2011-09-06
        • 1970-01-01
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 2012-04-14
        • 1970-01-01
        • 2012-06-16
        相关资源
        最近更新 更多