如何替换逃生字符?

时间:2013-05-13 05:01:09

标签: java regex escaping

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

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

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

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

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

4 个答案:

答案 0 :(得分:1)

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

有两种方法

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

  2. 在Windows的路径中也使用/,在unix和windows中使用相同的

  3. 示例

    在Windows中

    c:/ temp的作用与c:\ temp

    相同

    在Unix中

    的/ tmp /

    希望有所帮助

    由于 ABHI

答案 1 :(得分:1)

使用character version of replace代替字符串版本。

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

答案 2 :(得分: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();
  }

答案 3 :(得分:1)

这有效:

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

replace()方法实际上取代了所有目标的出现次数,

您最初使用的是replaceAll(),它取代了正则表达式。它使这项工作,做到这一点:

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

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