java中斜杠"/"和反斜杠"\"分别代表什么意思
概述
斜杠"/"就士普通的字符;
反斜杠"\"则在java中和不同的字符会组成不同的转义字符
解析
引用说明:
有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为“/”;反斜杠的符号为“\” 。
斜杠(/)在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)方法的区别:
#code:
#out:
可以看出上面两种都返回相同的替换结果。
这里的关键是String.replaceAll()是用regular expression 来作为参数的。
但是java本身的字符串对于转义符\也有类似的处理。
首先,java会把“\\\\”解释成一个字符串(其中包含两个char)。
接下来,由于replaceAll是以正则表达式作为参数,所以“\\”被解释成一个regex。对于一个regex来说这就代表着一个字符,就是“\”。
对后面的那个8个\来说,最终会被解释成“\\”。
换言之,假设String.replaceAll()是以普通字符串,而不是regex作为参数,那么这样写代码: String target = source.replaceAll('\\', '\\\\'); 就可以了。
拓展内容
转义字符
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
字符型常量所表示的值是字符型变量所能包含的值。我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。
'A', '\x2f', '\013';
其中:\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。例如十进制的17用十六进制表示就是
‘\x11’,用八进制表示就是‘\021’;
注意:在Turbo C 2.0中,字符型常量表示数的范围是-128到127,除非你把它声明为unsigned,这样就是0到255。
上面我们见到的\x,\n,\a等等都是叫转义字符,它告诉编译器需要用特殊的方式进行处理。