String怎么替换"\",之前那个帖子没说清楚,现在重新发帖
需求是这样的,有些url有特殊字符,而这些特殊字符在windows的文件名里是不能拥有的,所以要把这样特殊字符都替换成别的字符
比如
3g.qq.com:80\forward.jsp
本地的文件名就是
3g.qq.com:80_forward.jsp
也就说给我的参数是3g.qq.com:80\forward.jsp,而我要转为3g.qq.com:80_forward.jsp
代码:
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); }}
[解决办法]
LZ 花了两个帖子。都没把大家弄清楚。。。哈哈。。
我爱莫能助。。。我的办法也是 。。把所有可能出现的转义字符 做处理。。再替换。。。但太麻烦。。估计有简单的 函数可以实现。。。我也像看看答案。。哈哈。。
LZ 继续解释你的问题。哈哈。。
[解决办法]
public static void main(String[] args) { String input = "3g.qq.com:80\\forward.jsp"; Pattern p = Pattern.compile("\\\\"); Matcher m = p.matcher(input); String r = m.replaceAll("_"); System.out.println(r); Pattern p2 = Pattern.compile("\\", Pattern.LITERAL); Matcher m2 = p2.matcher(input); String r2 = m2.replaceAll("_"); System.out.println(r2); }
[解决办法]
String str = "3g.qq.com:80\forward.jsp";System.out.println(str.replaceAll("\\", "_"));
[解决办法]