String path = "/var/lib/////xen//images///rhel";
斜杠的数量可以是任意数量。如何正常化像java的路径:从java中的字符串路径规格化斜杠
/var/lib/xen/images/rhel
String path = "/var/lib/////xen//images///rhel";
斜杠的数量可以是任意数量。如何正常化像java的路径:从java中的字符串路径规格化斜杠
/var/lib/xen/images/rhel
使用内置String
方法replaceAll
,用正则表达式"/+"
,一个斜线替换一个或多个斜线:
path = path.replaceAll("/+", "/");
我不太熟悉正则表达式,所以我试着用“/ *”代替“/ +” :) – Amby 2013-05-06 16:26:39
@Downvoter - 为什么downvote?此代码有效。 – rgettman 2013-05-06 16:31:26
可能无法跨平台... – rogerdpack 2016-04-14 22:30:39
你可以使用一个File
对象输出路径特定于当前平台:
String path = "/var/lib/////xen//images///rhel";
path = new File(path).getPath();
不幸的是,只是调用getPath似乎并不总是够用,例如:'new File(new File(new File(“a // b”),“/”),“c”) .getPath()'='a/b // c'。 – rogerdpack 2016-04-14 23:16:42
使用Guava“小号CharMatcher
:
String simplifiedPath = CharMatcher.is('/').collapseFrom(originalPath, '/');
一对夫妇更多的选择:
调用的文件#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
方法。
用一个'/'替换多次出现的'/'。 – 2013-05-06 16:15:48