溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

老生常談java路徑中的反斜杠和斜杠的區(qū)別

發(fā)布時(shí)間:2020-10-10 18:14:05 來(lái)源:腳本之家 閱讀:775 作者:jingxian 欄目:編程語(yǔ)言

JAVA中的斜杠

有正斜杠與反斜杠之分,正斜杠,一般就叫做斜杠,符號(hào)為“/”;反斜杠的符號(hào)為“\”。

斜杠(/)在JAVA中沒有什么特別的意義,就是代表一個(gè)字符‘/';

反斜杠(\)則不然,它和緊跟著它的那個(gè)字符構(gòu)成轉(zhuǎn)義字符,如“\n”(換行)、“\””(字符‘”‘)等,所以在字符串中要表示字符'\'要用“\\”來(lái)表示,例:如果你這樣定義一個(gè)字符串String s = “name\sex”是錯(cuò)誤的,要這樣定義String s = “name\\sex”;

注意:在正則表達(dá)式中的“\\”表示和后面緊跟著的那個(gè)字符構(gòu)成一個(gè)轉(zhuǎn)義字符(姑且先這樣命名),代表著特殊的意義;所以如果你要在正則表達(dá)式中表示一個(gè)反斜杠\,應(yīng)當(dāng)寫成”\\\\”。如果你這樣獲得一個(gè)Matcher,Matcher m= Pattern.compile(“\\”).matcher(“\\”)將會(huì)報(bào)錯(cuò),你應(yīng)當(dāng)這樣寫Matcher m = Pattern.compile(“\\\\”).matcher(“\\”)才是正確且匹配的

接下來(lái)我們來(lái)看一下String類中replace(CharSequencetarget,CharSequence replacement)方法與replaceAll(String regex,String replacement)方法的區(qū)別:

我們先看一個(gè)例子:

public static voidmain(String[] arg) throws OgnlException {

String s="sdf\\a\\aa";

//把s中的反斜杠\ 替換為\\

System.out.println(s);

System.out.println(s.replaceAll("\\\\","\\\\\\\\"));

System.out.println(s.replace("\\","\\\\"));

}

可以看出上面兩種都返回相同的替換結(jié)果。

這 里的關(guān)鍵是String.replaceAll()是用regular expression 來(lái)作為參數(shù)的。但是java本身的字符串對(duì)于轉(zhuǎn)義符\也有類似的處理。首先,java會(huì)把“\\\\”解釋成一個(gè)字符串(其中包含兩個(gè)char)。接下來(lái),由于replaceAll是以正則表達(dá)式作為參數(shù),所以“\\”被解釋成一個(gè)regex。對(duì)于一個(gè)regex來(lái)說這就代表著一個(gè)字符,就是“\”。對(duì)后面的那個(gè)8個(gè)\來(lái)說,最終會(huì)被解釋成“\\”。

換言之,假設(shè)String.replaceAll()是以普通字符串,而不是regex作為參數(shù),那么這樣寫代碼: String target = source.replaceAll('\\','\\\\'); 就可以了。

以上這篇老生常談java路徑中的反斜杠和斜杠的區(qū)別就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI