java ReplaceAll 的两个参数都必须是正则表达式。
在正则表达式中
\ (一个斜线)是用 \\ 来表示(即:用两个斜线表示一个斜线)
而在Java语言中 \ (一个斜线)是用 \\ 来表示。(即:也用两个斜线表示一个斜线)
所以正则表达式为两个斜线("\\")的写法,在Java语言中要用4个斜线来表示"\\\\"
(即: 一个"现实中的斜线" 在 正则表达式中用2个斜线来表示,而在Java中2个斜线要用4个斜线来表示)
所以代码如下:
/*
例如: str = "\\\\"; 实际上是表示2个斜线。
你的目的是将2个"实际"斜线 替换为4个"实际斜线"
需要编写如下代码
*/
// str的实际内容是\\ (即两个斜线)
String str = "\\\\";
//将str中的两个斜线,转换为两个双斜线(即: 4条斜线)
str = str.replaceAll("\\\\", "\\\\\\\\");
System.out.println(str);
- public static void main(String[] args) {
- String classPath = "java.lang.String";
- System.out.println(classPath.replaceAll(".", "/"));
- }
输出结果是?
如果你认为是java/lang/String
,那你就错了。正确的输出结果是:////////////////
原因:请先看看replace和replaceAll的区别。
replace和replaceAll的区别:
1、replace的参数是CharSequence和CharSequence,其中第一个是匹配的字符或字符串,第二个是替换的字符或字符串。即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,相当于字符串)
2、replaceAll的参数是String和String,第一个参数regex,是替换规则(用正则表达式)。原因在于String类中replaceAll的实现用到Pattern进行正则表达式匹配(关于正则表达式可以baidu或google一下,以后有空再写篇文章总结下)。
2、replaceAll的参数是String和String,第一个参数regex,是替换规则(用正则表达式)。原因在于String类中replaceAll的实现用到Pattern进行正则表达式匹配(关于正则表达式可以baidu或google一下,以后有空再写篇文章总结下)。
replaceAll的源代码如下:
public String replaceAll(String regex,
String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
在正则表达式中.(小圆点)表示匹配除换行符号外的任意字符,所以上面的例子才会出现16个/
如果想匹配小圆点,可以用转义字符\ 则代码应该如下:
System.out.println(classPath.replaceAll("\\.",
"/")); //其中\\匹配\,之后的\. 匹配.(小圆点)
当然,你也可以用replace()进行处理,如下:
System.out.println(classPath.replace(".",
"/"));