关于JAVA正则表达式里的\

在看java疯狂讲义正则表达式那一章,有一处关于\的处理不是很清楚,如图所示。"\\u0041\\"为什么匹配的是”a\“ 呢?我不懂为啥前面要加两个\\,这个不是匹配\自己本身吗?
最新回答
安和桥

2024-09-03 10:36:09

不看后面的\\,前面应该是\\u0041,其中\\为转义字符表示\,即\u0041,这个是一个整体,,\uxxxx这种格式是Unicode写法,表示一个字符,41应该是16进制数,4*16+1=65,相比较十进制ascii码值知道65对应的是A,我不知道这里为什么写a,可能是写错了吧。
追问
我还是不是很理解为啥要用两个\,不能直接写成\u0041吗?,根据图上第一行说的,要匹配\字符,请使用\\,那整个不是成了在匹配"\u0041\"了么,我的理解是前面加\\,就是是\失去特殊意义么。。。不知道哪里不对,反过来,如果我想要匹配字符串"\u0041\",那正则表达式该怎么写呢
追答
不能直接写\u0041,你想想看,我们用""包含字符串,万一我们要让这个字符串里面出现"该怎么弄呢,所以用一个\来做一个类似声明的意思,接下来要输入的作为真实字符,\"就可以在“”里面表示出来了,既然\拿去做特殊用途了,单独写一个\它会和后面输入的字符结合做相应的表示。后面跟数字表示相应的字符,跟",'这些字符去表示“,’。这样岂不是不能表示\了,不过这也可以用转义字符来实现,跟表示"一样,写\\不就可以了。总之就是\有特殊用途才不能直接写\。如果你要匹配字符串"\u0041\",就写xx.equals("\\u0041\\")就可以了。
念如丝缕

2024-09-03 09:00:11

1.41(16进制)是A字符的ascii码
2.JAVA字符串是用""括起来的,字符串中例如内容有双引号",这样写"""是有错的,就需要用\转义字符将"表示为一个普通字符,则写为"\""。
追问
那我感觉还是有问题啊,你看图上所写的例子的第二个"\\0101\t" ,\0101八进制,表示a么,关键它开头用了\\,这是说第一个'\'把第二个‘\’转义成一个普通字符么,那么后面的0101不就成了普通字符了吗,这样子就是在匹配”\0101"了么?
追答
前一个\是转义字符,将第二个\标识为普通字符,字符串内容中两个\\相当于\。
"\u0041"最后表示的就是一个unicode码字符。

对于这类问题,自己写一个测试类测试一下就知道了。
追问
你好,可是为什么 String s=new String("\\u0041");System.out.println(s);的输出的是"\u0041",而String s1=new String("\u0041");System.out.println(s1);输出的是A啊。。?