Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将字符串中的多个斜杠和反斜杠替换为单个斜杠?_Java_Regex_String_Replace_Replaceall - Fatal编程技术网

Java 如何将字符串中的多个斜杠和反斜杠替换为单个斜杠?

Java 如何将字符串中的多个斜杠和反斜杠替换为单个斜杠?,java,regex,string,replace,replaceall,Java,Regex,String,Replace,Replaceall,我的目标是用一个“\”替换所有“/”和“\” 输入: String path = "H\\\\\\\\\\ello///Wo\\rld\\!////"; String path = "H\ello\Wo\rld\!\"; path = path.replace("\\", "/"); path = path.replaceAll("[/]+", "/"); pfad = pfad.replace("/", "\\"); 输出: String path = "H\\\\\\\\\\ello

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

输入:

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

pfad = pfad.replace("/", "\\");
输出:

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

pfad = pfad.replace("/", "\\");
问题:

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

pfad = pfad.replace("/", "\\");
有没有一种方法可以在一行中完成这一切

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

  • 将所有字符更改为相同的字符
  • 用一条斜线替换所有“/”
  • 让它恢复正常
  • 我了解到我需要正则表达式,“[X]+”将把所有可能的组合,例如“xxfxxx”放到“xfxx”

    我正在搜索以下内容:(伪代码)

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

    我的解决方案:

    String path = "H\\\\\\\\\\ello///Wo\\rld\\!////";
    
    String path = "H\ello\Wo\rld\!\";
    
    path = path.replace("\\", "/");
    path = path.replaceAll("[/]+", "/");
    
    pfad = pfad.replace("/", "\\");
    

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

    说明:

    (?:…)
    -非捕获组

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

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

    |
    -交替:匹配右侧或左侧的图案

    或者,您可以使用模式
    [\/\]+
    ,该模式匹配一个或多个
    \
    /

    使用

    .replaceAll("[\\\\/]+", "\\\\")
    
    请参见正则表达式图:

    [\\/]+
    模式匹配
    \
    /
    一次或多次。替换模式是
    \\
    ,因为替换模式中的反斜杠在Java中是特殊的,它用于转义表示文本
    $
    字符的
    $
    符号。要匹配文字反斜杠,您需要

    见:


    很抱歉,您必须在这里逐个遍历字符。为什么要将
    \
    替换为
    \
    ?这不会改变任何事情。你可能想用单个的
    \
    替换一系列的
    \
    /
    吗?是的,这就是我的目标@pshemetry
    .replaceAll(“[\\\/]+”,“\\\\”)
    如果所有由一个或多个
    \
    /
    字符组成的区块都应替换为一个
    \
    。替换
    \\\/
    的结果是什么?应该是一个
    \
    还是两个
    \\
    (一个用于
    \\\\\
    序列,第二个用于
    /
    序列)?如果前后斜杠混合使用,这将不起作用。例如,
    H\\\//\\\ello///Wo\\rld\/\//。不过,对于OP来说,它可能已经足够好了;)@SamWhan这就是为什么我包含了在您的场景中有效的替代方案:)简单地
    [\\\/]+
    是sufficient@Strelok这就是为什么我还建议它不需要转义
    /
    字符,它在正则表达式中没有任何特殊之处。