Java中轉義字元反斜槓 \ 的代替方法 | repalceAll 內涵解析
一、需求
現有一個字串str
String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";
System.out.println("str = " + str);
在控制檯的輸出為:
str = {\"name\":\"spy\",\"id\":\"123456\"}
目標:將str轉化為標準的json格式串str1,以呼叫JsonUtil的方法,將字串轉為map。即目標str1為:
str1 = {"name":"spy","id":"123456"}
二、實現方法
1. 使用 StringEscapeUtils中的轉義與反轉義
apache工具包common-lang中有一個很有用的處理字串的工具類,其中之一就是StringEscapeUtils。利用它可方便地進行html、xml、java等的轉義與反轉義。
String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";
System.out.println("原始 str = " + str);
String str1 = StringEscapeUtils.unescapeJava(str);
System.out.println("目標 str1 = " + str1);
//對應方法的StringEscapeUtils.escapeJava(str1);
//可將str1轉義回str
控制檯輸出:
原始 str = {\"name\":\"spy\",\"id\":\"123456\"}
目標 str1 = {"name":"spy","id":"123456"}
2. 使用Java的replaceAll方法
String str1 = str.replaceAll("\\\\","");
//控制檯str1的輸出為:{"name":"spy","id":"123456"}
三、Java 的replaceAll 內涵解析
使用Java的replaceAll(String regex, String replacement)函式,即用replacement替換所有的regex匹配項,regex是一個正則表示式,replacement是字串。
String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}";
(1)對於串str,Java將其進行轉義,\\ 表示 \ ,\” 表示 ” ,故而在Java記憶體中即為:
{\”name\”:\”spy\”,\”id\”:\”123456\”},然而,我們的目標是 {“name”:”spy”,”id”:”123456”},即將轉義字元 \ 替換為空。
(2)Java的replaceAll(String regex, String replacement)函式,第一個引數是一個正則表示式。在正則表示式中的“\”與後面緊跟的那個字元構成一個轉義字元,代表著特殊的意義,比如”\n”表示換行符等。所以,如果要在正則表示式中表示一個反斜槓\,則應當用\\表達 。但引數regex 首先會經過Java的一次轉義,若想表達兩個反斜槓 \\,則需四個反斜槓。
綜上所述:replaceAll 的第一個引數是正則表示式,故而要經過兩次轉義,一次Java、一次正則。因此就需要四個反斜槓才可以匹配一個反斜槓。故而,替換一個反斜槓為空的replaceAll的程式碼即為:
str1 = str.replaceAll("\\\\","");
四、補充說明
String的replaceAll 同Matcher.replaceAll. 如下是String的repalceAll的原始碼實現。
public String repalceAll(String expr,String substitute){
return Pattern.compile(expr).matcher(this).replaceAll(substitute);
}
大家可以注意到Pattern.compile(expr)的引數是正則表示式。故而:
錯誤寫法(執行報錯):
String tmp = Pattern.compile("\\").matcher("h\\").replaceAll("ello");
正確寫法:
String tmp = Pattern.compile("\\\\").matcher("h\\").replaceAll("ello");
//輸出為hello
相關推薦
Java中轉義字元反斜槓 \ 的代替方法 | repalceAll 內涵解析
一、需求 現有一個字串str String str = "{\\\"name\\\":\\\"spy\\\",\\\"id\\\\":\\\"123456\\\"}"; System.out.println("str = " + str); 在控制檯的
java中轉義字元(回車\r\n)的替換 反轉義
原出處:http://www.51itong.net/java-string-rn-209.html 有一個的字串,列印的結果如下: hello \r\n world 現在要把其中的 \r\n 替換為正常的回車,再次的列印即為: hello world 可以用
PHP中4個反斜槓的問題 正則匹配 3個反斜槓的情況
背景: 今天在學習正則表示式,遇到了一個問題,php中4個反斜槓\在不同直譯器中的結果。 正文: 我們先來看看以下程式碼 echo '\'; 執行之後報語法錯誤,提示unexpected'\'; ',即\'; 這幾個字元出了問題 Parse error: sy
Java中轉義字元
JAVA中轉義字元: 1.八進位制轉義序列:\ + 1到3位5數字;範圍'\000'~'\377' \0:空字元 2.Unicode轉義字元:\u + 四個十六進位制數字;0~65535 \u0000:空字元 3.特殊字元:就3個 \":雙引號 \'
如何解決json中攜帶的反斜槓
// 從伺服器端獲取Json字串 String data= (JSONObject) event.getData().toString(); // 宣告中間變數進行處理 String fly= data.replace("\\", ""); //
Java| Java中轉義字元和路徑符
在java的實際開發中,經常會遇填寫一個檔案的相對路徑或者是絕對路徑的問題,對於初學者來說,經常犯難的是到底是用\ 還是用/的問題,本文將徹底解決這個問題的困擾. 先來看要下路徑符號在windows系統和再linux系統寫的顯示使用的區別: Windows下
特殊字元反斜槓\
在字元常量中,反斜槓(\)是一個特殊的字元,被稱為轉義字元,它的作用是用來轉義後面一個字元。轉義後的字元通常用於表示一個不可見的字元或具有特殊含義的字元,例如換行(\n)。下面列出一些常見的轉義字元。 \r表示回車符,將游標定位到當前行的開頭,不會跳到下一行。 \n 表示換行符,換到下一行的開頭。 \t 表示
反斜槓加3個數字是什麼編碼, JAVA轉義序列, 轉義字元彙總
例如:\345\244\247\345\256\266\345\245\275\343\200\202 對應漢字是“大家好。"8進製表示法.將以上每組按8進位制轉換成16進位制是 E5 A4 A7 E5 AE B6 E5 A5 BD 漢字的UTF-8碼, 以上三個字每字三位元組. 如果用JS的話,可以用en
反斜槓加3個數字是什麼編碼?JAVA轉義序列、轉義字元彙總。
例如:\345\244\247\345\256\266\345\245\275\343\200\202 對應漢字是“大家好。"8進製表示法.將以上每組按8進位制轉換成16進位制是 E5 A4 A7 E5 AE B6 E5 A5 BD漢字的UTF-8碼, 以上三個字每字三位元組. 如果用JS的話,可以用enc
Android JSONObject新增帶斜槓的字串會自動新增反斜槓(轉義字元)
今天發現專案中的地址在傳遞給伺服器的時候有轉義字元,伺服器處理不了;但是自己從 SharedPreferences中取出來的字串是沒有的。 JSONObject json = new JSONObject(); String IP = "http://111.1
使用java中replaceAll方法替換字串中的反斜槓
今天在專案中使用java中replaceAll方法將字串中的反斜槓("\")替換成空字串(""),結果出現如下的異常: 1 java.util.regex.PatternSyntaxException: Unexpected internal error near in
ajax解析Java傳來的json文字中反斜槓(\)問題
問題: 前臺傳來的content內容包含\的時候, 例如 –> name : Tom, content : \ 後臺組合成json字串 {“name” : “Tom”, “content” : “\”} 傳送給ajax, ajax會出現json解
JavaScript 中使用反斜槓來向文字字串新增特殊字元
插入特殊字元 反斜槓用來在文字字串中插入省略號、換行符、引號和其他特殊字元。 請看下面的 JavaScript 程式碼: var txt="We are the so-called "Vikings" from the north." document.write(t
Java學習筆記2:使用replaceAll()方法替換字串中的反斜槓:左斜槓(\)和右斜槓(/)
在程式設計過程中,需要將一個字串中的反斜槓(\)全部替換成(\\),很簡單的操作但是很容易報錯。 比如:String filePath = "D:\daxiang\te
黃聰:PHP去掉轉義後字串中的反斜槓\函式stripslashes
addslashes函式主要是在字串中新增反斜槓對特殊字元進行轉義,stripslashes則是去掉轉義後字串中的反斜槓\,比如當你提交一段json資料到PHP端的時候可能會遇到json字串中有\導致json_decode函式無法將json資料轉換成陣列的情況,這時你就需要stripslashes函式。 該
Java正則轉義星號* 加號+ 反斜槓\
問題引入: 這是我在使用Java正則表示式時,需要將已有的正則表示式和使用者輸入的字串進行拼接,然後將新的字串當作一個正則表示式來使用,這時,問題來了,如果使用者輸入連續的星號* 或者連續的加號+ 或者是反斜槓\ 就會導致String.matches()則
JS中的反斜槓 (\)是什麼意思
JS中的反斜槓 (\)是什麼意思 在js中我們經常能看到“\”。讓人有一種看不懂的錯覺。那麼,為什麼本來正常的程式碼,要加上反斜槓呢,他的作用是什麼呢 我們先來看一段程式碼 var txt="We are the so-called&nb
java replaceAll() 方法要用 4 個反斜槓,表示一個反斜槓
java replaceAll() 方法要用 4 個反斜槓,表示一個反斜槓 例如 str1="aa\bbb"; str2="aa'bbb"; 要想替換成 str1="aa\\bbb";str2="aa\'b
檔案路徑最好使用正斜槓。使用反斜槓可能在unix系統中訪問不到檔案。
/*** * 下載模板 */ public void downTemp() { String title="data"; String savePath = PathUtil.getP
正則表示式中的\\\\/四個反斜槓含義
<? php echo '\\'; 執行結果:\ 由此可見,在字串中,兩個反斜槓被解釋為一個反斜槓,然後在作為正則表示式, \\ 則被正則表示式引擎解釋為 \,所以在正則表示式中需要使用四個反斜槓。 也就是說,前兩個反斜槓在字串中被解釋為一個反斜槓,後兩個也