JAVA中的转移字符

原创 2011年02月17日 11:52:00

?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代码 复制代码
  1. import java.io.*;   
  2.   
  3. public class HexCodeConverter {   
  4.   /**  
  5.    * 转换后 每个字符串的长度 一般十六进制用4位表示  
  6.    */  
  7.   public static final int CHAR_LENGTH = 4;   
  8.   /**  
  9.    * 根据参数进行转换,第一个参数是源文件名,第二个是目标文件名。  
  10.    * 如果使用相同的文件名则将源文件覆盖掉。  
  11.    * @param args String[]  
  12.    * @throws FileNotFoundException  
  13.    * @throws IOException  
  14.    */  
  15.   public static void main(String[] args) throws FileNotFoundException,   
  16.       IOException {   
  17.     if(args.length == 2){   
  18.       String sourceFile = args[0];   
  19.       String targetFile = args[1];   
  20.       File sf = new File(sourceFile);   
  21.       File tf = new File(targetFile);   
  22.       String src = HexCodeConverter.loadFromFile(sf);   
  23.       HexCodeConverter.saveToFile(tf,HexCodeConverter.convert(src));   
  24.     }   
  25.   }   
  26.   
  27.   /**  
  28.    * 从指定的文件里读取所有的代码。  
  29.    * @param file File  
  30.    * @return String  
  31.    * @throws FileNotFoundException  
  32.    * @throws IOException  
  33.    */  
  34.   public static String loadFromFile(File file) throws  
  35.       FileNotFoundException, IOException {   
  36.     BufferedReader br = new BufferedReader(new FileReader(file));   
  37.     StringBuilder sb = new StringBuilder();   
  38.     while (true) {   
  39.       String line = br.readLine();   
  40.       if (line != null) {   
  41.         sb.append(line);   
  42.       }   
  43.       else {   
  44.         break;   
  45.       }   
  46.     }   
  47.     br.close();   
  48.     return sb.toString();   
  49.   }   
  50.   /**  
  51.    * 将源代码转换成用十六进制表示的字符序列  
  52.    * 例如: c 转换 成 //u0063  
  53.    * @param source String  
  54.    * @return String  
  55.    */  
  56.   public static String convert(String source) {   
  57.     char[] sourceCodes = source.toCharArray();   
  58.     StringBuilder sb = new StringBuilder();   
  59.     for (int i = 0; i < sourceCodes.length; i++) {   
  60.       String character = Integer.toHexString(sourceCodes[i]);   
  61.       StringBuilder charSB = new StringBuilder();   
  62.       int len = character.length();   
  63.       len = CHAR_LENGTH - len;   
  64.       for (int j = 0; j < len; j++) {   
  65.         charSB.append("0");   
  66.       }   
  67.       sb.append("//u" + charSB.toString()+ character);   
  68.     }   
  69.     return sb.toString();   
  70.   }   
  71.   /**  
  72.    * 将代码字符串存储到指定的文件里  
  73.    * @param file File  
  74.    * @param codes String  
  75.    * @throws IOException  
  76.    */  
  77.   public static void saveToFile(File file, String codes) throws IOException {   
  78.     BufferedWriter bw = new BufferedWriter(new FileWriter(file, false));   
  79.     bw.write(codes);   
  80.     bw.flush();   
  81.     bw.close();   
  82.   }   
  83. }  

JAVA中转义字符

JAVA中转义字符 2010年08月11日 星期三 上午 12:22 JAVA中转义字符: 1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377' ...
  • GeneralYY0
  • GeneralYY0
  • 2012年02月29日 18:36
  • 215844

java 转义符 \\|

http://zghbwjl.blog.163.com/blog/static/12033667220133174828149/ 看一段程序 String t = "a||b||c||...
  • stewen_001
  • stewen_001
  • 2014年04月03日 15:01
  • 38285

Java 转移字符与字符的处理

那么这里在列上一些转义字符 \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \r 回车 ('\u000D') \d 数字 等价于 [0-9] \D 非数字 等价于...
  • qq_29631809
  • qq_29631809
  • 2017年07月27日 00:56
  • 399

JAVA中转义字符简单的四种

1.八进制转义序列: \ddd 三位八进制 \n 回车(\ ) \t 水平制表符(\ ) \b 空格(\) \r 换行(\ ) \f 换页(\ ) \’ 单引号(\') \...
  • twc18638942853
  • twc18638942853
  • 2017年02月24日 09:15
  • 1489

java转移文件

import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;    public cl...
  • dhdhxgx
  • dhdhxgx
  • 2015年05月07日 15:55
  • 360

用java实现的文件和文件夹拷贝和转移

  • 2008年05月24日 09:06
  • 6KB
  • 下载

c语言中的转移字符及其printf

字符集分类 1.可显示字符:当从键盘输入,显示器可以显示的字符 2.控制字符:要么键盘上没有输入键,或者键入后不能显示的字符。在c语言中控制字符必须同转义字符表示。‘\’,即反斜杠和其后面的字符一...
  • yyf_it
  • yyf_it
  • 2016年06月04日 11:58
  • 508

java 处理字符串是的转义字符的处理

java中的字符串部分转义字符,如反斜杠的使用小结   意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b             退格(B...
  • lu_jun_xian
  • lu_jun_xian
  • 2017年02月13日 13:46
  • 2857

Java(数据库迁移 源码).zip

  • 2010年04月14日 14:59
  • 6.81MB
  • 下载

java代码操作数据转移,把一个数据库里的东西移动到另一个数据库,自动建库建表

  • 2014年07月24日 16:25
  • 21KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中的转移字符
举报原因:
原因补充:

(最多只允许输入30个字)