public static String getPortableFilePath(String target)
{
Pattern ptr=Pattern.compile("[\\|/]+");
Matcher mtr=ptr.matcher(target);
return mtr.replaceAll(File.separator);
}
public static void main(String[] args)
{
System.out.println(getPortableFilePath("C:///Program Files////Java\\jdk1.6.0_23/bin"));
}
在上面的代码中,我尝试用当前系统文件分隔符替换所有正斜杠和反斜杠。代码在放入类中时可以正常编译,但在执行时会出现数组索引越界异常。你猜为什么吗?
异常(exception):
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at java.lang.String.charAt(Unknown Source)
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceAll(Unknown Source)
at Files.getPortableFilePath
at Files.main
最佳答案
您的方法 (a) 命名错误且 (b) 不必要。命名错误,因为它不返回可移植文件路径,而是返回当前系统的路径;不必要的,因为如果你只使用/随处可见,Java 将在所有平台上正确运行。 Java 文件名中永远不需要使用反斜杠。
关于java - 转换为可移植文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689234/