您的位置:首页 > 编程语言 > Java开发

JAVA中的转移字符

2011-02-17 11:52 176 查看
?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中的一个有趣的“毛病”。在编译之前先将所有的转义字符转换成它所表达的实际字符,也就有人发出狂想,写下了以上的代码。可以说上面的代码是把这种机制运用到了极致。

一般人是不会写这样的代码的,所以做了一个程序来将正常的代码转换成这样的代码。

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: