2013-05-13 61 views
-3

我想清理/标准化文件目录的一些用户输入。 Windows是否\和* nux/* nix执行/。在java \必须转义到\\否则你会得到编译错误。如何替换逃逸字符?

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

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

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

样品用户输入:C:\User\SomeUser\SomeDir

+0

尝试像这样:'return raw。替换(“\\\\”,“/”);' – 2013-05-13 05:02:43

+0

您能否提供用户的样本输入? – 2013-05-13 05:03:18

+0

示例用户输入:'C:\ User \ SomeUser \ SomeDir' – SnakeDoc 2013-05-13 05:04:14

回答

1

,如果你正在为Windows和UNIX这是该开发商需要照顾

的一个问题的解决方案有2单独使用\两种方法

  1. 手柄适用于Windows的转义字符和UNIX做路径seperately

  2. 使用/在Windows和路径,同样会在UNIX中使用和Windows

例如

在Windows

C:/ TEMP就像相同c:\临时

在Unix中

/TMP/

希望帮助

感谢 ABHI

+0

但有一天,你会遇到'\\ ALPHA \ C:\ Temp'甚至只是'\\?\ C:\ Very \ very \ long \ path \ longer \ than \ 258 \ characters'。怎么办? – 2013-05-13 05:22:41

+0

根据输入SnakeDoc给出,我已经提出了解决方案。“示例用户输入:C:\ User \ SomeUser \ SomeDir” – abhi 2013-05-13 05:50:39

1

使用character version of replace,而不是字符串版本。

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

为什么会做任何不同的事情? – 2013-05-13 05:59:07

+0

@TedHopp,我同意应该没有什么区别,但是对于单字符输入,输入中的多个字符是否与输出中的字符相对应没有混淆,所以如果它仍然没有做到你想要的,那么你知道在别处寻找错误。 – 2013-05-13 16:38:45

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(); 
    } 
1

这工作:

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

事实上replace()方法取代所有出现的目标,

看来你最初使用replaceAll(),它取代了正则表达式。它使这项工作,做TIS:

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

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