今天在讀取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;
}
當用於分割的符號爲 兩個 \\時候 函數就會自動取第一個~
終於問題結局,原理也知道了~