簡體   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