簡體   English   中英

用File.separator替換所有“/”

[英]replaceAll “/” with File.separator

在Java中,當我這樣做時:

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

我回來了

    a@b@c@d

但當我這樣做時:

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

它拋出一個StringIndexOutOfBoundsException,我不知道為什么。 我試着看一下,但這不是很有幫助。 誰能幫我嗎?

它在文檔中說它就在那里:

請注意,替換字符串中的反斜杠(\\)和美元符號($)可能會導致結果與將其視為文字替換字符串時的結果不同; 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);
    }
}

注意,我在sep使用文字\\\\而不是直接使用File.separator ,因為我的分隔符是UNIX - 您應該能夠使用:

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

這輸出:

a\b\c\d

正如所料。

File.separator在Windows上是\\ ,即; 這是一個逃脫的反斜杠。 但是,在替換字符串中,它意味着完全不同的東西。 所以你必須逃避它兩次,一次用於Java,一次用於替換字符串。

這應該工作:

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

試試這個

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

嘗試使用str.replace('/', File.separatorChar)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM