0

这就是我如何尝试确保属性文件中给出的路径是有效的 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)

谁能告诉我为什么?!

4

3 回答 3

3

replaceAll期望 RegExes,replace改为使用。

你可以在这里找到 JavaDocs

于 2013-08-14T11:34:26.407 回答
0

如果你想确保路径是有效的,试试

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

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

于 2013-08-14T11:42:17.443 回答
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

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

于 2013-08-14T11:57:03.477 回答