A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴光新 黑马帝   /  2013-7-5 22:41  /  3116 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. \uhhhh 带有十六进制值 0x 的字符 hhhh
  3. */
复制代码
RegexDemo.java:2: 错误: 非法的 Unicode 转义
\uhhhh 带有十六进制值 0x 的字符 hhhh
  ^
1 个错误


这样都报错,是怎么回事?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
是这个的问题:\uhhhh

首先,"\" 是转义字符,这个知道吧。字符串"\r\t"表示回车换行,虽然是字符串的形式,但是是打印不出来的,如果想打印出来需要再转义:"\\r\\t"可以打印出:\r\t。

解释:
"\\" 中的前一个斜线表示转义字符,把第二个斜线转义成了普通的斜线这样就可以打印出来了,自然的r就不存在被转义了。分解之后相当于:"\\"+"r"+"\\"+"t"   。

这样解释还能明白吧!应该是可以的,这差不多就是最详细的解释了。希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 哥们,多给黑友们回答下问题吧.

查看全部评分

回复 使用道具 举报
本帖最后由 宋旭东 于 2013-7-5 22:57 编辑

补充:
转义字符在注释里面也是可以被读取的,会把这个当做一个代码语句来解释,应该写成 :\\uhhhh



回复 使用道具 举报
我觉你这里如果是在java文件中是没有错误,你这个注释是不时不再java文件,而是在Html等类文件呢?\u转意符,就像是我们在写一个注册表单\u5846,加四个数字就代表一个文字。不同的类型的文件其注释是不相同的
回复 使用道具 举报
首先,\uhhhh是非法的转义字符,\u后面跟四位十六进制数,最大值应该是\uffff,你这个hhhh肯定是不合法的。

而这个\uhhhh被java编译器解析到了,所以会报错。

java编译器看到“ /* ”这个开头,就会从这个开头开始往下每个字符每个字符的寻找'*' '/'这个字符组合,这个结尾也就是两个字符的组合吧。而转义字符也代表字符,所以在从前到后的解析过程中,也会解析转义字符。

比如说,你前面写个/*,然后再后面写个\u002a\u002f,那么从/*开始到\u002a\u002f结束的中间内容就会被编译器确定为注释部分。因为\u002a相当于 '*', \u002f相当于'/'。

所以说,不是你这个转义字符放在注释里还报错,而是在java编译器寻找注释结尾的过程中(还不知道哪个部分是注释呢)发现了这个非法的\uhhhh,所以报错。
回复 使用道具 举报
lanbuohan 发表于 2013-7-6 00:26
我觉你这里如果是在java文件中是没有错误,你这个注释是不时不再java文件,而是在Html等类文件呢?\u转意符 ...

是java文件
回复 使用道具 举报
longlangcx 发表于 2013-7-6 00:59
首先,\uhhhh是非法的转义字符,\u后面跟四位十六进制数,最大值应该是\uffff,你这个hhhh肯定是不合法的。 ...

从来没注意这个注释部分,一直以为只要加个/**/就能在里面写任何字符~我也考虑到会不会是转义符引起的,我也在前面多加个\,但因为是学正则表达式,我把一些资料复制到笔记中,当然我的笔记目前都是记录在java文件中,就是老师每讲解一个例子,我都把笔记暂时记录在java文件里,所以如果想在前面加\,怕到时候误解,看来该换“笔记本”了。
回复 使用道具 举报
longlangcx 发表于 2013-7-6 00:59
首先,\uhhhh是非法的转义字符,\u后面跟四位十六进制数,最大值应该是\uffff,你这个hhhh肯定是不合法的。 ...

厉害啊,这个知识真的很冷,牛
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马