`

JAVA中转义字符

    博客分类:
  • java
 
阅读更多

JAVA中转义字符2009-08-12 17:40JAVA中转义字符:

1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'
\0:空字符
2.Unicode转义字符:\u + 四个十六进制数字;0~65535
\u0000:空字符
3.特殊字符:就3个
\":双引号
\':单引号
\\:反斜线
4.控制字符:5个

\' 单引号字符

\\ 反斜杠字符

\r 回车

\n 换行

\f 走纸换页

\t 横向跳格

\b 退格

点的转义:. ==> u002E
美元符号的转义:$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C
======================================================================
下面的程序使用了两个Unicode的转义字符,它们是用其十六进制代码来表示Unicode字符。那么,这个程序会打印什么呢?
Java代码
public class EscapeRout{  
public static void main(String[] args){  
// \u0022 是双引号的Unicode转义字符  
System.out.println("a\u0022.length()  
+\u0022b".length());  
}  

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


对该程序的一种很肤浅的分析会认为它应该打印出26,因为在由两个双引号"a\u0022.length()+\u0022b"标识的字符串之间总共有26个字符。
稍微深入一点的分析会认为该程序应该打印16,因为两个Unicode转义字符每一个在源文件中都需要用6个字符来表示,但是它们只表示字符串中 的一个字符。因此这个字符串应该比它的外表看其来要短10个字符。 如果你运行这个程序,就会发现事情远不是这么回事。它打印的既不是26也不是16,而是2。

理解这个谜题的关键是要知道:Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前, 先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一 个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。

如果该程序的作者确实希望得到这种行为,那么下面的语句将要清楚得多:


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

更有可能的情况是该作者希望将两个双引号字符置于字符串字面常量的内部。使用Unicode转义字符你是不能实现这一点的,但是你可以使用转义字 符序列来实现[JLS 3.10.6]。表示一个双引号的转义字符序列是一个反斜杠后面紧跟着一个双引号(\”)。如果将最初的程序中的Unicode转义字符用转义字符序列来 替换,那么它将打印出所期望的16(错误,应该是14,不知道是怎么会出来16):

Java代码
System.out.println("a\".length()+\"b".length());

许多字符都有相应的转义字符序列,包括单引号(\')、换行(\n)、制表符(\t)和反斜线(\\)。你可以在字符字面常量和字符串字面常量中使用转义字符序列。
实际上,你可以通过使用被称为八进制转义字符的特殊类型的转义字符序列,将任何ASCII字符置于一个字符串字面常量或一个字符字面常量中,但是最好是尽可能地使用普通的转义字符序列。

普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的。

ASCII是字符集的最小公共特性集,它只有128个字符,但是Unicode有超过65,000个字符。一个Unicode转义字符可以被用来在只使用ASCII字符的程序中插入一个Unicode字符。一个Unicode转义字符精确地等价于它所表示的字符。

Unicode转义字符被设计为用于在程序员需要插入一个不能用源文件字符集表示的字符的情况。它们主要用于将非ASCII字符置于标识符、字符 串字面常量、字符字面常量以及注释中。偶尔地,Unicode转义字符也被用来在看起来颇为相似的数个字符中明确地标识其中的某一个,从而增加程序的清晰 度。

总之,在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode转义字符。Unicode转义字符可能会因为它们在编译序列中 被处理得过早而引起混乱。不要使用Unicode转义字符来表示ASCII字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之 外的情况,应该直接将ASCII字符插入到源文件中。

 

 

 


转义序列 含义
\n 回车(\u000a)
\t 水平制表符(\u0009)
\b 空格(\u0008)
\r 换行(\u000d)
\f 换页(\u000c)
\' 单引号(\u0027)
\" 双引号(\u0022)
\\ 反斜杠(\u005c)
\ddd 三位八进制
\udddd 四位十六进制
JAVA中转义字符:
1.八进制转义序列:
\ + 1到3位5数字;范围'\000'~'\377'
\0:空字符
2.Unicode转义字符:
\u + 四个十六进制数字;0~65535
\u0000:空字符
八进制的是1到3个数字并且注意数值范围,如果超了范围也会编译错误的,而十六进制的转义必须是4个十六进制数字,而且有一些无法转义,如'\u000a',无法转移,会出现编译错误,而且相当多的数字没有对应的字符,只会转义成问号 而对于数字的转义,只要不超过范围既可以了。
3.特殊字符:就3个 \":双引号 \':单引号 \\:反斜线
4.控制字符:5个 \' 单引号字符 \\ 反斜杠字符 \r 回车 \n 换行 \f 走纸换页 \t 横向跳格 \b 退格
点的转义:. ==> u002E
美元符号的转义:$ ==> u0024
乘方符号的转义:^ ==> u005E
左大括号的转义:{ ==> u007B
左方括号的转义:[ ==> u005B
左圆括号的转义:( ==> u0028
竖线的转义:| ==> u007C
右圆括号的转义:) ==> u0029
星号的转义:* ==> u002A
加号的转义:+ ==> u002B
问号的转义:? ==> u003F
反斜杠的转义: ==> u005C

分享到:
评论

相关推荐

    详解JAVA中转义字符

    本篇文章主要介绍了详解JAVA中转义字符,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java中转义字符反斜杠\的代替方法及repalceAll内涵解析

    主要介绍了Java中转义字符反斜杠的代替方法及repalceAll内涵解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    详细的ASCII码对照表

    JAVA中转义字符 1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377' \0:空字符 2.Unicode转义字符:\u + 四个十六进制数字;0~65535 \u0000:空字符 3.特殊字符:就3个 \":双引号 \':单引号 \\:反斜线 ...

    java中常见的转义字符

    java中常见的转义字符,收集的,很有用

    StackoverflowJavaAnswers:在这里,我将添加我对需要可运行的 java 示例用于计算器溢出的问题的未来答案

    - 如何在 Gson 中转义斜线 - 使用 Gson 自定义反序列化 - 使用 Java 上传文件到远程服务器 - 是否保证在并行流上订购 .collect? - 将标签打印到 csv 文件 - 在 Jersey 中使用 Gson 而不是 Jackson

    java web开发技术大全

    4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个JSP程序 5.1.1 实例:编写显示服务器当前时间的JSP程序 5.1.2 调试JSP程序 5.1.3 改变JSP的...

    java web技术开发大全(最全最新)

    4.7.5 实例:在请求消息头和响应消息头中转输中文 4.8 小结 第5章 JSP技术 5.1 用MyEclipse编写第一个JSP程序 5.1.1 实例:编写显示服务器当前时间的JSP程序 5.1.2 调试JSP程序 5.1.3 改变JSP的访问路径...

    IBM MQ 联调对接代码.rar

    亲测有效,希望可以帮到大家。 1.linux 基于IBM MQ基础环境安装完成; 2.队列管理器创建,发送方和接收方mq配置; 3.联调常见问题: a.发送方和接收方通道不能直接用java代码放消息...//外网ip中转,必须注意此处配置;

    Spark学习---统计文件单词出现次数

    2.通过flatMap转化操作切分字符串,获取单词新JavaRDD; 3.通过mapToPair,以key为单词,value统一为1的键值JavaPairRDD; 4.通过reduceByKey,累计叠加每个key,统计单词出现次数; 三.代码实现 四.下载代码

    DWR.xml配置文件说明书(含源码)

    客户端的javascript将返回给reply对象(此时reply是java.util.date的字符串形式) 3.5 The 'scripted' Creator DWR 已经默认配置了scripted creator配置, 这种类型的creator采用BSF执行脚本语言并返回bean.例如 ......

    leetcode会员怎么买便宜-leetcode:javascript数据结构和算法

    看过c、c++、java版算法,javascript不会写 怎么学算法 通过“解题”夯实基础算法 理解算法的本质学会挖掘“规律” 举一反三学会变通和延伸 基础算法 字符串 反转字符串中的单词 计算二进制子串 数组 电话号码的组合...

    clj-rss:用于生成RSS提要的库

    , & , > , " :pubDate和:lastBuildDate键都应是java.util.Date或它的子类之一,这些子类将在生成的XML中转换为标准RSS日期字符串。 如果需要以结构化格式获取数据,请改用channel 。例子创建包含一些项目的频道...

    ekv-scala:基于目录和文件的加密密钥值存储库

    加密的KV商店EKV是基于目录和文件的加密密钥值存储库,具有以Scala编写的元数据保护。... 打开和关闭商店的密码是可以从内存中转储的字符串。 EKV保护密钥和内容,它不保护那些文件的大小或数据库中存储的唯一密

    open_kit:公共资源库

    随机数计算两个时间之间时间差返回Map集合UUID(不带“-”的)生成订单编号去除指定字符一个参数的非空验证多个参数非空验证将Javabean,Json,转换为Map将JavaBean转换成JSONObject(通过Map中转)将Map转换成...

Global site tag (gtag.js) - Google Analytics