特定のリソースへのパスを格納するバックエンド データベースに「パス」というフィールドがあります。Windowsパスのバックスラッシュ(エスケープ)パスを多数保存する代わりに、ユーザーがファイルセパレータとして特定の文字を使用してパスを入力できるようにすることを考えています(OSに依存しません)。
例えば:
元のパス:
\\\\server\\share\\
db にエスケープされたパスを使用:
\\\\\\\\server\\\\share\\\\
代わりに私が欲しい:
%%server%share%
File.separator
そして後で、それらを本物のJavaのものに置き換えたいと思いました。この仕事では、私が見つけた最も迅速な解決策は、java.regex パターン マッチャーを使用することです。
この仕事の私の役割は次のとおりです。
private String convertToRealPathFromDB(String pth) {
String patternStr = "%";
String replaceStr = File.separator;
String convertedpath;
//Compile regular expression
Pattern pattern = Pattern.compile(patternStr); //pattern to look for
//replace all occurance of percentage character to file separator
Matcher matcher = pattern.matcher(pth);
convertedpath = matcher.replaceAll(replaceStr);
System.out.println(convertedpath);
return convertedpath;
}
しかし、命を救うはずだった同じ File.separator が問題を引き起こしています
java.lang.StringIndexOutOfBoundsException: 文字列インデックスが範囲外です: 1
私は他の文字でテストしました (例: '%' を 'q' に置き換えます)。この関数は正常に動作しますがFile.separator
、"\\\\"
文字列の置換は機能しません。
これには回避策があることを知りたいです。または、より簡単でエレガントなソリューションです。