在Java中,当我这样做时:
"a/b/c/d".replaceAll("/", "@");
我回来了
a@b@c@d
但是当我这样做时:
"a/b/c/d".replaceAll("/", File.separator);
它抛出 StringIndexOutOfBoundsException,我不知道为什么。我尝试查找此内容,但没有太大帮助。谁能帮我吗?
它说它就在那里文档 http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29:
请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同;看Matcher.replaceAll
.
And, in Matcher.replaceAll
:
请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同。美元符号可以被视为对如上所述捕获的子序列的引用,并且反斜杠用于转义替换字符串中的文字字符。
您需要做的是转义替换字符串中的所有转义字符,例如Matcher.quoteReplacement() http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#quoteReplacement%28java.lang.String%29:
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);
}
}
注意,我用的是字面意思\\
in sep
而不是使用File.separator
直接因为我的分隔符是 UNIX 分隔符 - 你应该能够使用:
s = s.replaceAll("/", Matcher.quoteReplacement(File.separator));
这输出:
a\b\c\d
正如预期的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)