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();
}
}
/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();
}
}
相关文章推荐
- java 内的一些转移字符
- java中一般特殊字符转移
- 特殊字符对应的转移码(for Android Java)
- java转移字符
- Java 转移字符与字符的处理
- java字符编码和oracle乱码
- Java字符串format-用户号补齐格式化应用
- java 字节流和字符流的区别
- Java字节流与字符流
- 【Java】javac 编译源文件出现“锘缝ublic”、“非法字符: \65279”的乱码情况 .
- java统计字符串中字符及子字符串个数
- 【java】位、字节、汉字、字符的关系
- Error:(1, 1) java: 非法字符: '\ufeff'
- JAVA截取文本特定字符串
- Java I/O 技术(三)—— 操作 字符流 的对象
- 【Java学习】命令行下编译java程序,出现错误:编码GBK的不可映射字符
- Java IO 转换流 字节转字符流
- 关于java中如何获得特殊字符
- java ------华为上机机试--计算字符串个数
- Java字符编码