У меня есть поле с именем 'path' в серверной базе данных, в котором хранится путь к определенному ресурсу. Вместо того, чтобы хранить множество путей с обратной косой чертой (экранированных) для пути Windows, моя идея - позволить пользователю вводить путь с определенным символом в качестве разделителя файлов (независимо от ОС).
Например:
оригинальный путь:
\\\\server\\share\\
с экранированным путем в БД:
\\\\\\\\server\\\\share\\\\
вместо этого я хочу:
%%server%share%
и позже я хотел заменить их на Java 1014 * для реальных вещей. Для этой работы самым быстрым решением, которое я нашел, является использование java.regex Pattern Matcher.
Моя функция для этой работы:
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
и "\\\\"
, так как строка замены не работает.
Мне нравится знать, что для этого есть обходной путь. Или лучше, проще и элегантнее.