将所有“/”替换为 File.separator

2022-09-02 23:13:43

在Java中,当我这样做时:

    "a/b/c/d".replaceAll("/", "@");

我回来了

    a@b@c@d

但是当我这样做时:

    "a/b/c/d".replaceAll("/", File.separator);

它抛出了一个StringIndexOutOfBoundsException,我不知道为什么。我试图查找这个,但它不是很有帮助。任何人都可以帮我吗?


答案 1

它在文档中说:

请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同;看。Matcher.replaceAll

而且,在:Matcher.replaceAll

请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文本替换字符串时的结果不同。如上所述,美元符号可以被视为对捕获的子序列的引用,反斜杠用于转义替换字符串中的文字字符。

您需要做的是转义替换字符串中的任何转义字符,例如使用 Matcher.quoteReplacement()

import java.io.File;
import java.util.regex.Matcher;

class Test {
    public static void main(String[] args) {
        String s = "a/b/c/d";
        String sep = "\\"; // File.separator;
        s = s.replaceAll("/", Matcher.quoteReplacement(sep));
        System.out.println(s);
    }
}

请注意,我在中使用文字而不是直接使用,因为我的分隔符是UNIX的 - 你应该能够只使用:\\sepFile.separator

s = s.replaceAll("/", Matcher.quoteReplacement(File.separator));

此输出:

a\b\c\d

不出所料。


答案 2

试试这个

    String str = "a/b/c/d";
    str = str.replace("/", File.separator);