正斜槓/表示除法,分隔。在windows系統中一般用來分隔命令行參數,/表示選項等。不能做爲文件名。html
反斜槓\,在windows系統中用來表示目錄。java
而在unix系統中,/表示目錄。因爲web遵循unix命名,因此在網址(URL)中,/表示目錄。web
C#中反斜槓\與斜槓/ 轉移字符路徑的問題正則表達式
在C#中 \ 是轉義字符,以下所示express
轉義序列編程 |
字符windows |
\’服務器 |
單引號網絡 |
\」網站 |
雙引號 |
\\ |
反斜槓 |
\0 |
空 |
\a |
警告 |
\b |
退格 |
\f |
換頁 |
\n |
換行 |
\r |
回車 |
\t |
水平製表符 |
\v |
垂直製表符 |
就好比說要輸出這一段字符串 「/_\」 可能你會認爲是這樣寫 @""/_\""
但這樣寫編譯器都不讓你經過了,但看上表所示,你能夠這麼寫 "\"/_\\\""
另外在獲取文件路徑的時候 不少人喜歡用 d:\test.txt
而後就會發生所謂的轉義字符錯誤了
解決的辦法通常人是使用 @d:\test.txt 我不知道這樣寫是否會帶來一些問題
但我一直的作法是d:/test.txt 也徹底能夠訪問
在網上找了下, 彷佛斜槓與反斜槓最大的區別就是
網絡中不能以斜槓在windows系統中一般用來分隔命令行參數,/表示選項等。
算術運算符/用來取商,如5/2=2.5
引用說明:有正斜槓與反斜槓之分,正斜槓,通常就叫作斜槓,符號爲「/」;反斜槓的符號爲「\」 引用斜槓(/)在JAVA中沒有什麼特別的意義,就是表明一個字符‘/’;
反斜槓(\)則否則,它和緊跟着它的那個字符構成轉義字符,如「\n」(表示換行)、「\」」(表示字符‘」’)等,因此在字符串中要表示字符‘\‘要用「\\」來表示,例:若是你這樣定義一個字符串String s = 「name\sex」是錯誤的,要這樣定義String s = 「name\\sex」;
引用注意:在正則表達式中的「\\」表示和後面緊跟着的那個字符構成一個轉義字符(姑且先這樣命名),表明着特殊的意義;因此若是你要在正則表達式中表示一個反斜槓\,應當寫成「\\\\」。若是你這樣得到一個Matcher,Matcher m = Pattern.compile(「\\」).matcher(「\\」)將會報錯,你應當這樣寫Matcher m = Pattern.compile(「\\\\」).matcher(「\\」)纔是正確且匹配的引用接下來咱們來看一下String類中replace(CharSequence target,CharSequence replacement)方法與replaceAll(String regex, String replacement)方法的區別:
public static void main(String[] arg) throws OgnlException {String s ="sdf\\a\\aa"; //把s中的反斜槓\ 替換爲\\ System.out.println(s); System.out.println(s.replaceAll("\\\\", "\\\\\\\\")); System.out.println(s.replace("\\", "\\\\"));}
引用能夠看出上面兩種都返回相同的替換結果。
這 裏的關鍵是String.replaceAll()是用regular expression 來做爲參數的。可是java自己的字符串對於轉義符\也有相似的處理。首先,java會把「\\\\」解釋成一個字符串(其中包含兩個char)。接下來,因爲replaceAll是以正則表達式做爲參數,因此「\\」被解釋成一個regex。對於一個regex來講這就表明着一個字符,就是「\」。對後面的那個8個\來講,最終會被解釋成「\\」。
換言之,假設String.replaceAll()是以普通字符串,而不是regex做爲參數,那麼這樣寫代碼: String target = source.replaceAll(‘\\‘, ‘\\\\‘); 就能夠了。
正斜槓(左斜槓),符號是"/";反斜槓(右斜槓),符號是"\"。
在Unix/Linux中,路徑的分隔採用正斜槓"/",好比"/home/hutaow";而在Windows中,路徑分隔採用反斜槓"\",好比"C:\Windows\System"。
有時咱們會看到這樣的路徑寫法,"C:\\Windows\\System",也就是用兩個反斜槓來分隔路徑,這種寫法在網絡應用或編程中常常看到,事實上,上面這個路徑能夠用"C:/Windows/System"來代替,不會出錯。可是若是寫成了"C:\Windows\System",那就可能會出現各類奇怪的錯誤了。
至於上述問題出現的緣由,要從字符串解析這方面來分析。
學過編程的人都應該知道,在C裏面,輸出字符串時,若是想輸出一個換行,那就要加上‘\n‘這個標誌,相似的,輸出一個TAB,就加上‘\t‘,也就是說,反斜槓("\")這個符號會把跟在它後面的字符結合起來轉義成其它字符。根據這個原理,若是想輸出雙引號(‘"‘),就須要輸入‘\"‘,這樣纔會將包含了雙引號的字符串正確的寫入內存中。那麼若是想輸入一個反斜槓呢?很簡單,只要敲‘\\‘就能夠了。
看到這裏或許有些人已經看出眉目了,若是"C:\Windows\System"這個路徑字符串交給C編譯器編譯,實際寫入內存的字符串並無包含反斜槓"\",甚至緊跟在反斜槓後面的字母也一塊兒被轉義成了其它的字符,再次調用的話勢必會出問題。
字符串解析不只僅侷限於C編譯器,Java編譯器、一些配置文件的解析、Web服務器等等,都會遇到對字符串進行解析的這個問題,因爲傳統的Windows採用的是單個斜槓的路徑分隔形式,致使在對文件路徑進行解析的時候可能發生沒必要要的錯誤,因此就出現了用雙反斜槓"\\"分隔路徑的形式。無論解析引擎是否將反斜槓解析成轉義字符,最終在內存中獲得的都是"\",結果也就不會出問題了。
由此也能夠看出Windows或者說DOS在設計初期考慮不夠周全,爲了和Unix一些特徵區別開來,將Unix中的正斜槓"/"分隔路徑方式改變成了反斜槓"\"。這樣改變致使的一個問題就是在早期DOS命令行中,正常的文件名是不能包含空格的,若是包含了空格,會致使輸入這樣的文件名時,命令解析沒法將其和參數區分開。例如,想要進入"hutaow yuan"這個目錄(在此先忽略8.3命名規則),直接輸入"cd hutaow yuan",命令行會將其解析爲進入"hutaow"目錄,然後面的"yuan"作參數,這顯然不是所指望的。
而在Unix中,文件名若是包含空格,能夠直接在空格前加上反斜槓"\"進行轉義,從而很好的和命令參數區別出來(參數之間通常使用空格分隔)。仍是上面的例子,在Unix中,只要輸入"cd hutaow\ yuan"(在yuan前面的空格前加上"\"),命令行會正確的辨認出"hutaow yuan"並進入這個目錄。
固然,如今Windows的後續版本已經使用其它方法(好比文件名用雙引號括住)解決了空格問題。
正斜槓,又稱左斜槓,符號是"/";
反斜槓,也稱右斜槓,符號是"\"。
常常很迷惑正斜槓與反斜槓到底有何區別?如下是一些總結:
DOS路徑:
C:\WINDOWS\SETTING ..這是反斜槓的做用後面跟着的是文件名
C:\dir /P ...這就是正斜槓後面是一個名令的參數dir 是命令.
C#中:
在C#中 \ 是轉義字符,以下所示
轉義序列 | 字符 |
\’ | 單引號 |
\」 | 雙引號 |
\\ | 反斜槓 |
\0 | 空 |
\a | 警告 |
\b | 退格 |
\f | 換頁 |
\n | 換行 |
\r | 加車 |
\t | 水平製表符 |
\v | 垂直製表符 |
另外在獲取文件路徑的時候 不少人喜歡用 "d:\test.txt" ,而後就會發生所謂的轉義字符錯誤了
解決的辦法通常人是使用@"d:\test.txt"
windows系統:
反斜槓\,在windows系統中用來表示目錄。
正斜槓/,網址、Url地址。
Asp.net中:
"../ " 表示當前目錄的上級目錄,即當前的父目錄;
"/" 表示網站的根目錄;
原文連接: http://www.mamicode.com/info-detail-69694.html