構文: /folder/part1\ part2.txt
:
これを解決するための正規表現には、探しているパターンの前の文字が\
. 正規表現は次のようになります(?<!\\)\s+
。(?<!\\)
は後ろの部分、\\
は見たくないパターンです。\s+
私たちが探しているパターンです - ある種の空間です。この正規表現を Java で使用するには、次のように正しくエスケープする必要がありますstring.split("(?<!\\\\)\\s+")
。
new File()
これは UNIX スタイルのファイル パスで機能します。ファイルをたとえば
に渡したい場合は、まだバックスラッシュを削除する必要がある場合があります。
構文の場合
"/folder/part1 part2.txt"
:
これはより普遍的なアプローチかもしれませんが、追加の作業が必要になります。アイデアは、文字列をループし、スペースがエスケープされた部分にない限り、スペースが表示されるたびに前の部分をリストに保存することです。例えば:
List<String> parts = new ArrayList<String>();
boolean escaped = false;
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if(!escaped && (c == ' ' || c == '\t')) { // Space in non-escaped part
parts.add(stringBuilder.toString()); // Put buffer in list
stringBuilder = new StringBuilder();
} else if (c == '"') // Escape sign
escaped = !escaped; // Toggle escape status
else
stringBuilder.append(c); // Add char to buffer
}
parts.add(stringBuilder.toString()); // Put the last buffer into the array
必要に応じて、リストを配列に変換できます
String[] args = parts.toArray(new String[parts.size()])
この形式では、UNIX および Windows スタイルのパスを使用できます。結果の配列には、引用符を除いたファイル パスが含まれます。