2013-05-06 55 views
4
String path = "/var/lib/////xen//images///rhel"; 

斜杠的数量可以是任意数量。如何正常化像java的路径:从java中的字符串路径规格化斜杠

/var/lib/xen/images/rhel 
+1

用一个'/'替换多次出现的'/'。 – 2013-05-06 16:15:48

回答

9

使用内置String方法replaceAll,用正则表达式"/+",一个斜线替换一个或多个斜线:

path = path.replaceAll("/+", "/"); 
+0

我不太熟悉正则表达式,所以我试着用“/ *”代替“/ +” :) – Amby 2013-05-06 16:26:39

+2

@Downvoter - 为什么downvote?此代码有效。 – rgettman 2013-05-06 16:31:26

+0

可能无法跨平台... – rogerdpack 2016-04-14 22:30:39

5

你可以使用一个File对象输出路径特定于当前平台:

String path = "/var/lib/////xen//images///rhel"; 
path = new File(path).getPath(); 
+0

不幸的是,只是调用getPath似乎并不总是够用,例如:'new File(new File(new File(“a // b”),“/”),“c”) .getPath()'='a/b // c'。 – rogerdpack 2016-04-14 23:16:42

1

一对夫妇更多的选择:

调用的文件#getCanonicalPath恰好除去斜线,但它似乎用这个堆栈内部:

at java.io.UnixFileSystem.canonicalize0(Native Method) 
at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:172) 
at java.io.File.getCanonicalPath(File.java:618) 

看起来确实很慢(至少在我们特定的系统上,这是Linux下的GPFS),所以我不能使用它。 (!感谢,他说他有可能出现在JDK的地方)

所以下次我试过了,从奥宾已删除的答案,这实际上是相当快一点:

path = new File(new File(path).toURI().normalize()).getPath();

不幸下面的toURI方法似乎对这样的:

at java.io.UnixFileSystem.getBooleanAttributes0(Native Method) 
    at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242) 
    at java.io.File.isDirectory(File.java:843) 
    at java.io.File.toURI(File.java:732) 

这是再次,有点放缓。

参见在java NIO Paths#normalize

因此,在这一天结束时,我结束了使用从他人replaceAll方法。