9

我已经生成了一个文件名并存储在一个字符串变量路径中尝试过使用

path=path.replaceAll('\','/') 

但这不起作用

4

7 回答 7

43

replaceAll()需求Strings作为参数。所以,如果你写

path = path.replaceAll('\', '/');

它失败了,因为你应该写

path = path.replaceAll("\", "/");

但这也失败了,因为字符“\”应该输入“\\”。

path = path.replaceAll("\\", "/");

这在执行过程中会失败PatternSyntaxException,因为 fisrString是一个正则表达式(感谢@Bhavik Shah 指出)。所以,把它写成一个正则表达式,正如@jlordo 在他的回答中给出的那样:

path = path.replaceAll("\\\\", "/");

是你要找的。

为了优化您的核心,您应该使其独立于操作系统,因此请使用@Thai Tran 的提示:

path = path.replaceAll("\\\\", File.separator);

但这失败了StringIndexOutOfBoundsException(我不知道为什么)。如果您replace()不使用正则表达式,它会起作用:

path = path.replace("\\", File.separator);
于 2012-10-31T08:23:50.180 回答
13

If it is a file path, you should try "File.separator" instead of '\' (in case your application works with Nix platform)

于 2012-10-31T08:19:33.187 回答
8

path=path.replaceAll('\','/');将无法编译,因为您必须转义反斜杠,

使用path=path.replace('\\','/');(它将替换所有出现,请参阅 JavaDoc)

path=path.replaceAll("\\\\", "/");(此正则表达式转义反斜杠);-)

在评论中有一个解释,为什么你需要 4 个“\”来为一个“\”制作正确的正则表达式。

于 2012-10-31T08:28:00.537 回答
2

您应该使用该replace方法并转义反斜杠:

path = path.replace('\\', '/');

请参阅文档

public String replace(char oldChar, char newChar)

返回一个新字符串,该字符串是用 newChar 替换此字符串中所有出现的 oldChar 所产生的。

于 2012-10-31T08:15:27.683 回答
1

由于它是一个文件路径,因此您完全不需要执行此操作。Java 理解这两种语法。如果您尝试将 File 转换为 URL 或 URI,它具有执行此操作的方法。

于 2012-10-31T09:55:24.863 回答
-1

the \ is not just some character in java.

it has its significance, some characters when preceeded by \ have a special meaning,

refer here section escape sequence for details

Thus if you want to use just \ in your code, there is an implementation \\ for it.

So replace

path=path.replaceAll("\","/") 

with

path=path.replaceAll("\\","/") 

And this will fail during execution giving you a PatternSyntaxException, because the first String is a regular expression So based on @jlordo answer , this is the way to go

path = path.replaceAll("\\\\", "/");
于 2012-10-31T08:19:13.827 回答
-1
   String s="m/j/"; 
   String strep="\\\\";
   String result=s.replaceAll("/", strep);
    System.out.println(result);
于 2012-10-31T09:20:37.300 回答