日期:2014-05-20 浏览次数:20959 次
String str = "3g.qq.com:80\forward.jsp"; System.out.println(str.replaceAll("\\", "_"));
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^ at java.util.regex.Pattern.error(Pattern.java:1713) at java.util.regex.Pattern.compile(Pattern.java:1466) at java.util.regex.Pattern.<init>(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:823) at java.lang.String.replaceAll(String.java:2190) at com.lmiky.test.StringTest.main(StringTest.java:46)
String str = "3g.qq.com:80\forward.jsp"; System.out.println(str);
------解决方案--------------------
public static void replaceStr(){
String str="3g.qq.com:80\forward.jsp";
Pattern p = Pattern.compile("\\t");
Matcher m = p.matcher(str);
if (m.find()){
str = m.replaceAll("_\\t");
}
System.out.println(str);
}
------解决方案--------------------
一,你定义的常量就是错的。
你的常量内容是3g.qq.com:80\forward.jsp
在java里它就必须这么写
String str = "3g.qq.com:80\\forward.jsp";
你在str下面打印一下str就知道是怎么回事了
二,下面的str.replaceAll("\\\\", "_")对了,它首先进行java的转译,代表你要把正则表达式\\(也就是字符\) 换成 _ 之所以\在正则里需要用\\表示\是因为正则也需要转译。
------解决方案--------------------
String str = "3g.qq.com:80\forward.jsp"; System.out.println(str.replaceAll("\f", "_f").replaceAll("\\\\", "_"));
------解决方案--------------------
String str = "3g.qq.com:80\forward.jsp"; System.out.println(str.replace("\f", "_f"));
------解决方案--------------------
....
我很无语啊...
传给你的字符串,你看到的是3g.qq.com:80\forward.jsp
实际存储的是3g.qq.com:80\\forward.jsp
懂?
------解决方案--------------------
不管你的数据哪里取出来的
只要你Syste.out.print出来看到是3g.qq.com:80\forward.jsp这样
他的实际存储就是 \\ 两个啊两个....
------解决方案--------------------
public class Test14 { public static void main(String[] args) { String url = "3g.qq.com:80\\tab\\back\\forward.jsp"; url = url.replaceAll("\\\\", "_"); System.out.println("Result:" + url); } }