`

特殊符号 java 总结 针对illegalArgumentException

阅读更多

 \n 回车(\u000a)

  \t 水平制表符(\u0009)

  \s 空格(\u0008)

  \r 换行(\u000d)

  @

  //隐藏命令的回显。

  ~

  //在for中表示使用增强的变量扩展;

  在set中表示使用扩展环境变量指定位置的字符串;

  在set/a中表示按位取反。

  %

  //使用两个%包含一个字符串表示引用环境变量。比如一个%time%可以扩展到当前的系统时间;

  单个%紧跟0-9的一个数字表示引用命令行参数;

  用于for中表示引用循环变量;

  连续的两个%表示执行时脱为一个%。

  ^

  //取消转义字符,即将所有转义字符的转义作用关闭。比如要在屏幕显示一些特殊的字符,比如> >> | ^等时,就可以在其前面加一个^符号来显示这个^后面的字符了,^^就是显示一个^,^|就是显示一个|字符了;

  在set/a中是按位异;

  在findstr/r的[]中表示不匹配指定的字符集。

  &

  //命令连接字符。比如我要在一行文本上同时执行两个命令,就可以用&命令连接这两个命令;

  在set/a中是按位与。

  *

  //代表任意个任意字符,就是我们通常所说的"通配符";比如想在c盘的根目录查找c盘根目录里所有的文本文件(.txt),那么就可以输入命令"dir c:/*.txt";

  在set/a中是乘法。比如"set/a x=4*2",得到的结果是8;

  在findstr/r中表示将前一个字符多次匹配。

  ()

  //命令包含或者是具有优先权的界定符吧,比如for命令要用到这个(),我们还可以在if,echo等命令中见到它的身影;

  -

  //范围表示符,比如日期的查找,for命令里的tokens操作中就可以用到这个字符;

  在findstr/r中连接两个字符表示匹配范围;

  -跟在某些命令的/后表示取反向的开关。

  +

  //主要是在copy命令里面会用到它,表示将很多个文件合并为一个文件,就要用到这个+字符了;

  在set/a中是加法。

  |

  //管道符。就是将上一个命令的输出,作为下一个命令的输入."dir /a/b | more"就可以逐屏的显示dir命令所输出的信息;

  在set/a中是按位或;

  在帮助文档中表示其前后两个开关、选项或参数是二选一的。

  :

  //标签定位符,可以接受goto命令所指向的标签。比如在批处理文件里面定义了一个":begin"标签,用"goto begin"命令就可以转到":begin"变迁后面来执行批处理命令了。

  " "

  //界定符,在表示带有空格的路径时常要用""来将路径括起来,在一些命令里面也需要" "符号;

  在for/f中将表示它们包含的内容当作字符串分析;

  在for/f "usebackq"表示它们包含的内容当作文件路径并分析其文件的内容;

  在其它情况下表示其中的内容是一个完整的字符串,其中的>、>>、<、&、|、空格等不再转义。

  /

  //表示其后的字符(串)是命令的功能开关(选项)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的参数;

  在set/a中表示除法。

  <

  //命令重定向符,将其前面的命令的输出结果重新定向到其后面的设备中去,后面的设备中的内容被覆盖。比如可以用"dir > lxmxn.txt"将"dir"命令的结果输出到"lxmxn.txt"这个文本文件中去;

  在findstr/r中表示匹配单词的右边界,需要配合转义字符/使用。

  >>

  //命令重定向符。将其前面的命令的输出结果重新定向到其后面的设备中去,后面设备中的内容没有被覆盖。

  <

  //将其后面的文件的内容作为其前面命令的输入。

  在findstr/r中表示匹配单词的左边界,需要配合转义字符/使用。

  =

  //赋值符号,用于变量的赋值。比如"set a=windows"的意思意思是将"windows"这个字符串赋给变量"a";

  在set/a中表示算术运算,比如"set /a x=5-6*5"。

  /

  //这个"/"符号在有的情况下,代表的是当前路径的根目录.比如当前目录在c:/windows/system32下,那么你"dir /"的话,就相当与"dir c:/"

  在findstr/r中表示正则转义字符。

  ''

  在for/f中表示将它们包含的内容当作命令行执行并分析其输出;

  在for/f "usebackq"中表示将它们包含的字符串当作字符串分析。

  .

  //

  在路径的/后紧跟或者单独出现时:

  一个.表示当前目录;

  两个.表示上一级目录;

  在路径中的文件名中出现时:

  最后的一个.表示主文件名与扩展文件名的分隔。

  &&

  //连接两个命令,当&&前的命令成功时,才执行&&后的命令;

  ||

  //连接两个命令,当||前的命令失败时,才执行||后的命令。

  $

  //在findstr命令里面表示一行的结束。

  ``

  在for/f中表示它们所包含的内容当作命令行执行并分析它的输出。

  []

  在帮助文档表示其中的开关、选项或参数是可选的;

  在findstr/r中表示按其中指定的字符集匹配。

  ?

  //在findstr/r中表示在此位置匹配一个任意字符;

  ?在路径中表示在此位置通配任意一个字符;

  紧跟在/后表示获取命令的帮助文档。

  !

  //当启用变量延迟时,使用!!将变量名扩起来表示对变量值的引用;

  在set /a中表示逻辑非。比如set /a a=!0,这时a就表示逻辑1

 

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字符插入到源文件中。

 

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics