關於轉義字符\,在java中的應

今天在讀取json數據過程中發現了一個有意思的地方,json數據中有條是網頁的地址,地址中的\符號

例:http://write.blog.csdn.net/

是被換成了/,也就是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;
        }

當用於分割的符號爲 兩個 \\時候 函數就會自動取第一個~

終於問題結局,原理也知道了~

發佈了43 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章