-1

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

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

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

这不起作用......大概是因为它被读入为 a \not a \\。但是我做不到raw.replace("\", "/");...

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

4

4 回答 4

1

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

有两种方法

  1. 使用 \ 单独处理 Windows 的转义字符并单独处理 unix 的路径

  2. 在windows的路径中也使用/,在unix和windows中也是如此。

例子

在 Windows 中

c:/temp 的工作方式与 c:\temp 相同

在 Unix 中

/tmp/

希望有帮助

谢谢阿比

于 2013-05-13T05:08:31.560 回答
1

使用替换的字符版本而不是字符串版本。

private static String escapeDirs(String raw) {
  return raw.replace('\\', '/');
}
于 2013-05-13T05:13:02.653 回答
1

试试这个

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();
  }
于 2013-05-13T05:17:02.517 回答
1

这有效:

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

replace()方法实际上替换了所有出现的目标,

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

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

反斜杠的正则表达式是\\,而在 java 中,String 常量需要每一个都被转义,因此需要 4 个。

于 2013-05-13T06:29:20.853 回答