日期:2014-05-20  浏览次数:20852 次

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

代码:
Java code

String str = "3g.qq.com:80\forward.jsp";
System.out.println(str.replaceAll("\\", "_"));



报错
Java code

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)



我知道\f, \t等是转义符,我也知道正确的应该是\\,但是我现在能得到的就是\,不知道有什么办法实现



------解决方案--------------------
代码又错鸟...
Java code

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的转译,代表你要把正则表达式\\(也就是字符\) 换成 _ 之所以\在正则里需要用\\表示\是因为正则也需要转译。

------解决方案--------------------
Java code
String str = "3g.qq.com:80\forward.jsp";
        System.out.println(str.replaceAll("\f", "_f").replaceAll("\\\\", "_"));

------解决方案--------------------
Java code

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这样
他的实际存储就是 \\ 两个啊两个....
------解决方案--------------------
探讨
那只是个例子,实际3g.qq.com:80\forward.jsp是我从数据库里读取出来的

------解决方案--------------------
看到这里。我估计LZ得崩溃了。。。哈哈。。

------解决方案--------------------
直接用replaceAll("\\\\","_")就行了哈:
Java code

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);
    }
}