1.
2.java转义字符的理解
参考知乎大神:http://www.zhihu.com/question/29232624
正向和逆向处理转义字符
正向:把两个字符 \ n 识别为一个转义字符 new line
逆向:把一个字符 new line 识别为一个需要转义的字符,输出两个字符 \ npackage 转义zifu;public class a { public static void main(String[] args) { String b = "test line 1\ntest line 2\ntest line 3"; char[] c; c=b.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == '\\') System.out.println("yes"); } }}
结果是什么也没有显示
这样当然找不到任何转义字符,因为在在源码里的\n字面量(两个字符)都已经被编译器正向处理过一次变成了new line(一个LF字符),所以a里已经没有任何'\'字符了。
但测试不应该这么测。如果我们要写一个编译器,它通常要从源码文件读入原始文本。如果源码文件里出现了这样的字符串:test line 1\ntest line 2\ntest line 3
那我们要在一个小测试程序里模拟这个输入的话,应该写:
"test line 1\\ntest line 2\\ntest line 3"
这样得到的字符串才跟源码文件里的原始文本一致。其实就是人肉逆向处理一次来对抗编译器做的那一次正向处理。
假设是逆向:
总共只有那么多个字符需要转义。查语言规范把所有需要转义的字符放进一个表里匹配一下就好。package 转义zifu;public class a { public static void main(String[] args) { String b = "test line 1\\ntest line 2\\ntest line 3"; char[] c; c=b.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == '\\') System.out.println("yes"); } }}
结果显示为:
yes
yes