[英]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.