确保路径字符串是有效的java路径字符串

时间:2013-08-14 11:32:04

标签: java path

这是我尝试确保属性文件中给出的路径是有效的java路径(使用\\而不是\)的方式:

String path = props.getProperty("path");
if (path.length()>1) path=path.replaceAll("\\\\", "\\");
if (path.length()>1) path=path.replaceAll("\\", "\\\\");

在第一个替换我确保如果路径已经有效(有\\而不是\)那么它不会在第二次替换时加倍到\\\\而不是\\ ...

无论如何,我得到了这个奇怪的例外:

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 java.lang.String.replaceAll(Unknown Source)
    at com.hw.Launcher.main(Launcher.java:56)

任何人都可以说出原因吗?!

3 个答案:

答案 0 :(得分:3)

replaceAll期望RegExes,改为使用replace

您可以找到JavaDocs here

答案 1 :(得分:0)

如果您想确定路径有效,请尝试

    File f = new File("c:\\this\\that");
    f.getCanonicalPath();

File类用于拆分路径。这可能是验证路径有效的最佳方法。

答案 2 :(得分:0)

(让我为新手拼出来。)

如果您有文本文件或字符串,通常只会出现一个反斜杠。

在java源代码中,字符串或字符表示,反斜杠是转义字符,将下一个转换为特殊含义。反斜杠本身应该加倍,\\。字符串值本身只有一个反斜杠字符。

如果您阅读特殊文本,使用反斜杠转义(如换行符\n),则使用非正则表达式替换字符串:

// First escapes of other:
path = path.replace("\\n", "\n"); // Text `\n` -> linefeed
path = path.replace("\\t", "\t"); // Text `\t` -> tab
// Then escape of backslash:
path = path.replace("\\\\", "\\"); // Text `\\` -> backslash

对于文件路径,只有最后一个可能有意义,但不应该需要它。