Java 如何替换转义字符?

Java 如何替换转义字符?,java,regex,escaping,Java,Regex,Escaping,我正在尝试清理/标准化文件目录的一些用户输入。Windows执行\和*nux/*nix执行/。在java中,必须将\转义为\,否则会出现编译错误 如何从用户输入中读取\,并将其替换为/ private String escapeDirs(String raw) { return raw.replace("\\", "/"); } 这不管用。。。大概是因为它是作为\而不是\读入的。但是我不能做raw.replace(“\”,“/”) 示例用户输入:C:\user\SomeUser\Som

我正在尝试清理/标准化文件目录的一些用户输入。Windows执行
\
和*nux/*nix执行
/
。在java中,必须将
\
转义为
\
,否则会出现编译错误

如何从用户输入中读取
\
,并将其替换为
/

private String escapeDirs(String raw) {
    return raw.replace("\\", "/");
}
这不管用。。。大概是因为它是作为
\
而不是
\
读入的。但是我不能做
raw.replace(“\”,“/”)


示例用户输入:
C:\user\SomeUser\SomeDir

如果要为windows和unix构建解决方案,这是开发人员需要注意的问题之一

有两种方法

  • 使用\分别处理Windows的转义字符,并分别处理unix的路径

  • 在windows的路径中也使用/,在unix和windows中也会使用相同的路径

  • 范例

    在窗户里

    c:/temp的工作原理与c:\temp相同

    在Unix中

    /tmp/

    希望有帮助

    谢谢 Abhi

    使用而不是字符串版本

    private static String escapeDirs(String raw) {
      return raw.replace('\\', '/');
    }
    
    试试这个

    public static String backlashReplace(String myStr){
        final StringBuilder result = new StringBuilder();
        final StringCharacterIterator iterator = new StringCharacterIterator(myStr);
        char character =  iterator.current();
        while (character != CharacterIterator.DONE ){
    
          if (character == '\\') {
             result.append("/");
          }
           else {
            result.append(character);
          }
    
    
          character = iterator.next();
        }
        return result.toString();
      }
    
    这项工作:

    private String escapeDirs(String raw) {
        return raw.replace("\\", "/");
    }
    
    replace()
    方法实际上会替换所有出现的目标

    似乎您最初使用的是替换正则表达式的
    replaceAll()
    。它使这项工作,做它:

    private String escapeDirs(String raw) {
        return raw.replace("\\\\", "/");
    }
    

    反斜杠的正则表达式是
    \\
    ,在java中,字符串常量需要对每个常量进行转义,因此需要4个常量。

    尝试这样做:
    返回原始值。替换(“\\\”,“/”你能提供用户的示例输入吗?示例用户输入:
    C:\user\SomeUser\SomeDir
    它“不工作”是什么意思?您的示例输入得到了什么而不是您期望的结果?@extremecorders-为什么使用
    replaceAll
    ?这个简单的替换不需要使用正则表达式。但是有一天,你会遇到
    \\ALPHA\C:\Temp
    或者甚至只是
    \?\C:\Very\Very\long\path\long\than\258\characters
    。现在怎么办?根据SnakeDoc提供的输入,我已经确定了解决方案。“示例用户输入:C:\user\SomeUser\SomeDir”为什么会有什么不同?@TedHopp,我同意不应该有什么不同,但对于单字符输入,输入中的多个字符是否对应于输出中的一个字符没有任何混淆,因此,如果它仍然不能达到你想要的效果,那么你知道去别处寻找错误。