今天在读取json数据过程中发现了一个有意思的地方,json数据中有条是网页的地址,地址中的\符号
是被换成了/,也就是java中的转义符http://write.blog.csdn.net\postedit ,将地址放入chrome地址栏,回车,发现正常进入网页,于是高兴的直接用这个地址使用java进行访问,想要获取网页的源码,可是运行程序之后才发现错误,猜测错误是网址的编码不对,于是将网址中的中文转换成utf-8编码,之后还是出现了错误。
可是我将debug中取得的网址贴在地址栏中,发现网页正常打开,于是我发现了这2者之间的区别,地址栏自动将\ 换成了/这点在我的程序中没有完成,so 开始我的替换\的过程~
开始打算用split()函数,可是满心欢喜的输入 str.split(“\\”) 发现编译器报错,奇了怪,在字符串中明明好好的没报错,到了函数的参数这就报错了?
之后google了一番,终于解决了问题,参数中使用 \\\\四个斜杠,然后成功。
之后点开split的源代码,看到了答案
里面引用了一个 fastSplit的函数
public static String[] fastSplit(String re, String input, int limit) {
// Can we do it cheaply?
int len = re.length();
if (len == 0) {
return null;
}
char ch = re.charAt(0);
if (len == 1 && METACHARACTERS.indexOf(ch) == -1) {
// We're looking for a single non-metacharacter. Easy.
} else if (len == 2 && ch == '\\') {
// We're looking for a quoted character.
// Quoted metacharacters are effectively single non-metacharacters.
ch = re.charAt(1);
if (METACHARACTERS.indexOf(ch) == -1) {
return null;
}
} else {
return null;
}
当用于分割的符号为 两个 \\时候 函数就会自动取第一个~
终于问题结局,原理也知道了~