【问题标题】:How to replace multiple slash and backslash in a string with a single one?如何用单个替换字符串中的多个斜杠和反斜杠?
【发布时间】:2019-09-18 03:20:33
【问题描述】:

我的目标是将所有“/”和“\”替换为一个“\”。

输入:

String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";

输出:

String path = "H\ello\Wo\rld\!\";

问题:

有没有办法在一行中完成所有这些操作?

我的解决方案(有效!):

  1. 全部改成同一个字符
  2. 用一个斜杠替换所有“/”
  3. 恢复正常

我了解到我需要正则表达式,并且“[X]+”将放置所有可能的组合,例如。 “XXfXfXXXX”到“XfXfX”。

我正在寻找类似的东西:(伪代码)

path = path.replaceAll("[\\/]+", "\\");

我尝试了一些组合,但每次都会抛出错误。

我的解决方案:

path = path.replace("\\", "/");
path = path.replaceAll("[/]+", "/");

pfad = pfad.replace("/", "\\");

【问题讨论】:

  • 恐怕你得逐个遍历这里的字符
  • 为什么要把\换成\?它不会改变任何东西。您是否想用单个\ 替换\/系列
  • 是的,这就是我的目标@Pshemo
  • 如果 1 个或多个 \/ 字符的所有块都应替换为一个 \,请尝试 .replaceAll("[\\\\/]+", "\\\\")
  • 替换\\\\//的结果是什么?应该是一个\ 还是两个\\(一个用于\\\\ 序列,第二个用于// 序列)?

标签: java regex string replace replaceall


【解决方案1】:

尝试使用此模式匹配斜杠和反斜杠组:(?:\\+|\/+) 并将其替换为 \\

解释:

(?:...) - 非捕获组

\\+ - 匹配一个或多个\

\/+ - 匹配一个或多个/

| - 交替:在右侧或左侧匹配模式

Demo

您也可以使用模式[\/\\]+,它匹配\/ 中的一个或多个

Another demo

【讨论】:

  • 如果混合使用反斜杠和正斜杠,这将不起作用。例如。 H\\\\///\\\ello///Wo\\rld\!/\//。不过,这对 OP 来说可能已经足够了;)
  • @SamWhan 这就是我包含替代方案的原因,它适用于您的场景:)
  • 只要[\\\/]+就足够了
  • @Strelok 这就是为什么我也建议这样做
  • 不需要转义/ char,它在正则表达式中没有什么特别之处。
【解决方案2】:

使用

.replaceAll("[\\\\/]+", "\\\\")

查看正则表达式图:

[\\/]+ 模式匹配\/ 一次或多次。替换模式是\\,因为替换模式中的反斜杠在Java 中是special,它用于转义表示文字$ 字符的$ 符号。要匹配文字反斜杠,您需要 use four \ in the regex string literal

Java demo online:

String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";
System.out.println(path.replaceAll("[\\\\/]+", "\\\\"));
// => H\ello\Wo\rld\!\

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2023-03-16
    • 2020-01-17
    • 2012-05-17
    相关资源
    最近更新 更多