【java解惑】Unicode转义符的使用

如下所示代码:

public class Example014 {

	public static void main(String[] args) {
		/**
		 * it is a test for \utest.
		 */
		// \u0022 是双引 号的 Unicode 转义字符
		System.out.println("a\u0022.length() + \u0022b".length());
	}
}

结果说明:

上述程序有编译错误。如果删除多行注释,则编译错误消除,输出结果为2.

结果分析:

首先分析编译错误的原因,可以肯定编译错误是由多行注释引起的,它包含了一个\u开头的Unicode转义字符序列,但是却没有紧跟着4个16进制的数(0~65535),导致该转义失效。java是允许在注释以及代码中使用\u开头的Unicode转义字符的,但是要求转义必须有效,否则编译器会报告错误

删除该段注释或者使该转义有效之后,执行上述代码得到的结果是2,又是为什么呢?原来,Java 对在字符串字面常量中的 Unicode 转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前,先将Unicode转义字符转换成为它们所表示的字符。所以,程序中的第一个 Unicode转义字符将作为一个单字符字符串字面常量( "a")的结束引号,而第二个Unicode 转义字符将作为另一个单字符字符串字面常量( "b")的开始引号,该程序实际运行的代码如下:

System.out.println("a".length() + "b".length());

这样来看,输出结果为2也就不足为奇了。

(注:本【java解惑】系列,均是博主阅读《java解惑》原书后,将原书上的讲解和例子部分改编,然后写成博文进行发布的。所有例子均亲自测试通过,并共享在github上。通过这些例子,激励自己,惠及他人。同时,本系列所有博文会同步发布在博主个人微信公众号(搜索“爱题猿”或者“ape_it”),方便大家阅读。如果文中有任何侵犯原作者权利的内容,请及时告知博主,以便及时删除;如果读者对文中的内容有异议或者问题,欢迎通过博客留言或者微信公众号留言等方式共同探讨。)

源代码地址:https://github.com/rocwinger/java-disabuse

时间: 2024-08-10 14:47:19

【java解惑】Unicode转义符的使用的相关文章

Java语言基础---转义符

转义符 转义符使用"\"表示.常用转义符如下: 1.'\n'回车 2.'\t'制表位字符,一个表示向右跳8-10个字符 3.'\\'表示'\' 4.'\''表示单引号 5.'\'''表示双引号 6.'\u4e2d'表示unicode编码对应的字符(汉字:中) 7.(char)20013表示汉字:中

关于 java中的换行符

java中实现换行有以下3种方法: 1.使用java中的转义符"\r\n": String str="aaa"; str+="\r\n"; 这样在str后面就有换行了. 注意:\r,\n的顺序是不能够对换的,否则不能实现换行的效果. 2.BufferedWriter的newline()方法: FileOutputStream fos=new FileOutputStream("c;\\11.txt"); BufferedWri

JAVA转义符与基本数据类型简介

转义符: 转义符是用来转换一些会被当作代码的字符和不被识别的字符,将这些字符转换成能打印输出的字符. 以下是一些转义符的作用: 1.\n(回车):用于回车,不用转义符回车是识别不了的 2.\t(制表):制表是补充八个空格,例如abc,就在字符的后面补充五个空格,因为要算上前面的三个字符:如果字符长度超过八个,例如abcdefghijk,就以超过的个数再补空格,像前面末尾的ijk超过了三个就在这三个后面补充五个空格. 3.\r(回退):是用于回退到当前这行的行首 4.\a(警告):在dos界面能发

Java转义符\\|

http://blog.csdn.net/stewen_001/article/details/22871737 看一段程序 String t = "a||b||c||d"; String[] temp = t.split("\\|\\|"); System.out.println(temp.length); 主要是:"\\|\\|" 代表什么意思? 开始有点蒙,后来仔细一看明白了,原来是这样的: \\会转义成反斜杠,反斜杠本身就是转义符,所有就

【java解惑】Unicode转义字符的使用(续)

如下所示代码: public class Example016 { public static void main(String[] args) { char c = 0x000a; /**  * \u000A 注释1  */ // \u000A 注释2 System.out.println("c = " + c); System.out.println("a new line"); } } 结果: 编译时,提示注释2出现错误,导致无法正确编译. 结果分析:    

java转义符和正则表达式转义符

举例来说,连续相同的3位数字的正则表达式的标准语法是: ([\d])\1{2} 但是如果在java代码中这么写,就会出现语法错误,如下: String regEx = "([\d])\1{2}"; 考虑到\符号在java字符串的语法中属于转义符,所以,需要的java的语法是: String regEx = "([\\d])\\1{2}"; 为了加深印象,再来看下一个例子:前面连续相同的3位数字,后面连续相同的三位字符的正则表达式的标准语法是: (\d)\1{2}(.

《Java解惑》读书笔记

 摘选自<Java解惑>一书,之前整理了部分,一直没看完,最近为了督促自己每天读点这本书,决定一天至少更新一个谜题的内容,欢迎讨论. 欢迎关注技术博客http://blog.sina.com.cn/u/1822488043 Java解惑读书笔记 谜题1:奇数性 取余操作的定义: ( a / b ) * b + ( a % b ) = a 其中(a/b)是java运算的结果,也就是a/b是一个整数,比如3/2=1. 所以当取余操作返回一个非零结果的时候,它与左操作数具有相同符号. 请测试你的

【java解惑】java字符串替换方法使用

    如下代码: public class Example020 { public static void main(String[] args) { String separator = File.separator; String clazzName = Example020.class.getName(); String rs1 = clazzName.replace(".", separator); // 方法1 String rs2 = clazzName.replaceA

java解惑之再谈String.split()

<span style="font-size:18px;">import java.util.*; public class Sixty{ public static void main(String[] args){ String s = "sur,hs dg,fdg, d ,fd, d,d,dasg,ds"; String[] t = s.split(",\\s*"); System.out.println(s); for(int