繁体   English   中英

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

[英]Making sure a path string is a valid java path string

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

谁能告诉我为什么?

replaceAll需要RegExes,请改用replace

您可以在这里找到JavaDocs

如果要确保路径有效,请尝试

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

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

(让我也为新手说明一下。)

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

在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

对于文件路径,只有最后一个才有意义,但不应该这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM