2012-07-16 43 views
2

我试图用java(Android)中的'/'替换'\\',这似乎不起作用!在Java中用“/”替换“\”

String rawPath = filePath.replace("\\\\", "/"); 

这是什么问题?我已经逃脱了“\”并尝试转义'/',但没有用。原始字符串没有任何反应。

filePath = abc\\xyz(not after escaping two \\, the original string is with two \\) 
    rawPath = abc \ xyz 
    expected = abc/xyz 

这样做的正确方法是什么? (另一个Windows文件到Android路径转换概率)

+3

为什么不在整个代码中使用'java.io.File.separator'? – 2012-07-16 17:38:56

+0

是的 - 切换到这个,只是现在测试一些东西,跑到这里,谢谢! – Slartibartfast 2012-07-16 17:45:12

回答

12

当使用String.replace(String, String)反斜杠不需要转义两次(使用replaceAll时这就是 - 它正则表达式待遇)。所以:

String rawPath = filePath.replace("\\", "/"); 

或者使用char版本:

String rawPath = filePath.replace('\\', '/'); 
+0

反斜杠总是需要在java中转义。这与正则表达式无关。你的建议将用'/'替换每个'\\'。 – assylias 2012-07-16 17:37:36

+0

字符串中的反斜杠总是需要在代码中转义,除非您打算将它用作其他转义序列的一部分。 – pb2q 2012-07-16 17:38:27

+3

...当然...(这就是为什么我写了'replaceAll'的评论) – dacwe 2012-07-16 17:38:39

6

你不需要四druple逃生,

\\\\

,只是单纯的

\ \

6

用单斜线转义应该就够了。以下工作适合我。

String rawPath = filePath.replace("\\", "/");

2

如果你想在你的原始字符串用单正斜杠来代替2个反斜线序列,这应该工作:

String filePath = "abc\\\\xyz"; 
String rawPath = filePath.replace("\\\\", "/"); 

System.out.println(filePath); 
System.out.println(rawPath); 

输出:

abc\\xyz 
abc/xyz 
3
public static void main(String[] args) { 
    String s = "foo\\\\bar"; 
    System.out.println(s); 
    System.out.println(s.replace("\\\\", "/"));  
} 

将打印

foo\\bar 
foo/bar 
1

你真的有在String两个反斜杠摆在首位?这只出现在Java源代码中。在运行时只会有一个反斜杠。所以,这项任务会缩减为将反斜杠更改为正斜杠(为什么?)。如果你正在使用replaceAll(),你需要一个正则表达式,它需要四个:编译器两个,正则表达式两个,但你没有使用它,你使用的是replace(),它不是一个正则表达式,所以你只需要两个,一个用于编译器,另一个用于自身。

你为什么这样做?根本不需要在Java中的文件路径中使用反斜杠,也没有必要将它们翻译为/除非您正在使用类似URL的东西,在这种情况下,有File.toURI()方法以及URI和URL类的。