・Java的转义字符有如下:
\n 回车(\u000a)
\t 水平制表符(\u0009)
\b 空格(\u0008)
\r 换行(\u000d)
\f 换页(\u000c)
\' 单引号(\u0027)
\" 双引号(\u0022)
\\ 反斜杠(\u005c)
\ddd 三位八进制
\udddd 四位十六进制
・史上最牛的 java 代码,代码如下:
\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0063\u006c\u0061\u0073\u0073\u0020\u0048\u0065\u006c\u006c\u006f\u0057\u006f\u0072\u006c\u0064\u0020\u007b\u0020\u0020\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0073\u0074\u0061\u0074\u0069\u0063\u0020\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0061\u0072\u0067\u0073\u0029\u0020\u007b\u0020\u0020\u0020\u0020\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064\u0020\u0021\u0022\u0029\u003b\u0020\u0020\u007d\u007d
猜猜这些东西能编译吗?如果可以会输出什么呢??嘿嘿。。酷吧?想知道结果就继续看。。
答案是能够编译,会打印 Hello World ! 。怎么样 很酷吧????想要运行就把那对字符拷贝下来,然后复制到一个名为 :HelloWorld.java的文件里。编译运行都OK。他代表的实际代码如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World !");
}
}
如果你感到疑惑,现在就来讲解。那就是Java中的一个有趣的“毛病”。在编译之前先将所有的转义字符转换成它所表达的实际字符,也就有人发出狂想,写下了以上的代码。可以说上面的代码是把这种机制运用到了极致。
一般人是不会写这样的代码的,所以做了一个程序来将正常的代码转换成这样的代码。
import java.io.*;
public class HexCodeConverter {
/**
* 转换后 每个字符串的长度 一般十六进制用4位表示
*/
public static final int CHAR_LENGTH = 4;
/**
* 根据参数进行转换,第一个参数是源文件名,第二个是目标文件名。
* 如果使用相同的文件名则将源文件覆盖掉。
* @param args String[]
* @throws FileNotFoundException
* @throws IOException
*/
public static void main(String[] args) throws FileNotFoundException,
IOException {
if(args.length == 2){
String sourceFile = args[0];
String targetFile = args[1];
File sf = new File(sourceFile);
File tf = new File(targetFile);
String src = HexCodeConverter.loadFromFile(sf);
HexCodeConverter.saveToFile(tf,HexCodeConverter.convert(src));
}
}
/**
* 从指定的文件里读取所有的代码。
* @param file File
* @return String
* @throws FileNotFoundException
* @throws IOException
*/
public static String loadFromFile(File file) throws
FileNotFoundException, IOException {
BufferedReader br = new BufferedReader(new FileReader(file));
StringBuilder sb = new StringBuilder();
while (true) {
String line = br.readLine();
if (line != null) {
sb.append(line);
}
else {
break;
}
}
br.close();
return sb.toString();
}
/**
* 将源代码转换成用十六进制表示的字符序列
* 例如: c 转换 成 \\u0063
* @param source String
* @return String
*/
public static String convert(String source) {
char[] sourceCodes = source.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < sourceCodes.length; i++) {
String character = Integer.toHexString(sourceCodes[i]);
StringBuilder charSB = new StringBuilder();
int len = character.length();
len = CHAR_LENGTH - len;
for (int j = 0; j < len; j++) {
charSB.append("0");
}
sb.append("\\u" + charSB.toString()+ character);
}
return sb.toString();
}
/**
* 将代码字符串存储到指定的文件里
* @param file File
* @param codes String
* @throws IOException
*/
public static void saveToFile(File file, String codes) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(file, false));
bw.write(codes);
bw.flush();
bw.close();
}
}