java - 使用 java.regex 模式匹配器用 File.separator 替换字符

标签 java regex matcher

我在后端数据库中有一个名为“path”的字段,它存储特定资源的路径。我的想法是让用户输入具有特定字符作为文件分隔符的路径(独立于操作系统),而不是为 Windows 路径存储大量反斜杠(转义)路径。

例如:

原始路径:

\\\\server\\share\\

数据库中的转义路径:

\\\\\\\\server\\\\share\\\\

相反,我想要:

%%server%share%

后来我想用java的File.separator替换它们以获得真正的东西。对于这项工作,我发现最快的解决方案是使用 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: String index out of range: 1

我已经用其他字符进行了测试(例如:将 '%' 替换为 'q'),此函数工作正常,但 File.separator"\\\\" 作为替换字符串不起作用。

我想知道有解决方法。或者更好、更简单、更优雅的解决方案。

最佳答案

我认为您应该将 URI 存储在数据库中,因为它们是独立于平台的。

例如,在Windows中:

File f = new File("C:\\temp\\file.txt");
System.out.println(f.toURI());

打印

file:/C:/temp/file.txt

Unix 上:

File f = new File("/path/to/file.txt");
System.out.println(f.toURI());

打印

file:/path/to/file.txt

将 URI 转换为文件:

File f = new File(new URI("file:/C:/temp/file.txt"));

关于java - 使用 java.regex 模式匹配器用 File.separator 替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767456/

相关文章:

java - 设置增强for循环的初始值

java - 获取 SQLException : Driver:org. hsqldb.jdbcDriver 返回了 tomee 中 URL 的 null

Java 的模式匹配器表示未找到匹配项,但匹配项已打印到控制台

java - 使用 Pattern.compile 解析一行

java - 处理大型 CSV 文件的最佳方法是什么?

javascript - 在此正则表达式中允许破折号

java - 在Java正则表达式中组合or和否定?

javascript - 如何增加字符串中的每个数字?

java - 如何将文本文件与多个正则表达式模式进行匹配并计算这些模式的出现次数?

java - 具有一对一关系的实体的 JSON 输出