public static void main(String[] args) {
String str = "\\";
str = str.replaceAll("\\", "\\\\");
System.out.println(str);
}
出错:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1541)
at java.util.regex.Pattern.compile(Pattern.java:1298)
at java.util.regex.Pattern.<init>(Pattern.java:1047)
at java.util.regex.Pattern.compile(Pattern.java:785)
at java.lang.String.replaceAll(String.java:1663)
at org.luyang.StringUtil.main(StringUtil.java:14)
Exception in thread "main"
==============================================================
请问如何实现上述功能?
String str = "\\";
str = str.replaceAll("\\", "\\\\");
System.out.println(str);
}
出错:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1541)
at java.util.regex.Pattern.compile(Pattern.java:1298)
at java.util.regex.Pattern.<init>(Pattern.java:1047)
at java.util.regex.Pattern.compile(Pattern.java:785)
at java.lang.String.replaceAll(String.java:1663)
at org.luyang.StringUtil.main(StringUtil.java:14)
Exception in thread "main"
==============================================================
请问如何实现上述功能?
String str = "\\";
str = str.replaceAll("\", "\\\\");
System.out.println(str);
}你多了一个\
str = str.replaceAll("\\\\", "\\\\\\\\");
System.out.println(str);是这样哈!
^^^^ ^^^^^^^^
有没有人给讲一下,这是怎么回事,我以前也试过。今天才知道要这么写。
str = str.replace("\\", "\\\\");
str = str.replace("\\", "\\\\");
================================这个写法无法编译通过的。public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = count;
int i = -1;
char[] val = value; /* avoid getfield opcode */
int off = offset; /* avoid getfield opcode */ while (++i < len) {
if (val[off + i] == oldChar) {
break;
}
}
if (i < len) {
char buf[] = new char[len];
for (int j = 0 ; j < i ; j++) {
buf[j] = val[off+j];
}
while (i < len) {
char c = val[off + i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
return new String(0, len, buf);
}
}
return this;
}
这样就行了
前面一个\\\\是转换成正则表达式的\\,就是匹配\
后面的\\\\就是String 里面的\\
System.out.println("alert(str)");
这个结果就是".你只要自己想明白就行了,没有什么原理,只是转义.
这个好象也不行呀
String str = "\\";
str = str.replace("\\", Matcher.quoteReplacement("\\"));
System.out.println(str);
}