`
bruceyu
  • 浏览: 31101 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

神秘的转义字符

阅读更多

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

 

分享到:
评论

相关推荐

    常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集) - 来源:嘻嘻网 114_xixik_com_files

    HTML转义字符是网页开发中不可或缺的一部分,它们用于在HTML文档中表示特殊字符,防止浏览器错误解析或意外的代码执行。这些字符实体通常由一个反斜杠(\)后跟一个或多个数字或字母组成,例如"&lt;"代表小于号(&lt;)...

    C语言转义字符大全

    ### C语言转义字符详解 在C语言编程中,转义字符扮演着极其重要的角色,它们允许程序员在源代码中表示那些无法直接键入或有特殊含义的字符。本文将全面解析C语言中的转义字符,包括它们的定义、用途、格式及一些...

    C++第4课转义字符

    在C++编程语言中,转义字符是一种特殊符号,用于表示那些在文本字符串中具有特殊含义的字符。这些字符在源代码中不能直接输入,因此需要使用反斜杠(\)来“转义”它们的特殊意义,使得编译器能够正确地解析和处理...

    HTML_转义字符

    ### HTML转义字符详解 #### 一、引言 在HTML文档中,为了正确地显示某些特殊字符,如小于号(&lt;)、大于号(&gt;)等,需要使用转义字符来替代这些特殊符号。转义字符是HTML的一种特殊语法,用于在网页中插入无法直接...

    C#常用的转义字符

    ### C#常用的转义字符 在C#编程语言中,转义字符是非常重要的概念之一,它们可以帮助开发者在字符串中插入特殊字符或者控制字符,从而实现更丰富的文本处理功能。本文将详细介绍C#中常见的转义字符及其用法,并通过...

    HTML和XML中的转义字符

    1. **转义字符必须以“&”开头**:这是识别转义字符的关键标识符。 2. **不要嵌套使用转义字符**:例如,`&amp;amp;` 是不正确的使用方式,应该使用 `&amp;`。 3. **转义字符通常用于替换特殊符号**:如上述提到的...

    C语言常用转义字符表

    C语言作为一种广泛使用的编程语言,其转义字符是掌握该语言不可或缺的一部分。转义字符在C语言中扮演着特殊的角色,它们允许程序员在字符串或字符常量中插入具有特定意义的字符,这些字符通常不能直接输入或有特殊的...

    常见转义字符 Java

    ### 常见转义字符在Java中的应用与解析 #### 概述 在编程语言中,转义字符是一类特殊的字符序列,用于表示那些在文本中无法直接表示或者具有特殊含义的字符。Java作为一种广泛使用的面向对象编程语言,支持多种...

    gson转义字符

    本文将围绕“gson转义字符”这一主题展开,深入探讨如何避免Gson在使用时自动将一些字符转为Unicode转义字符。 ### 一、问题背景 在Java项目中,我们经常会使用Gson来处理JSON格式的数据。例如,我们需要将一个...

    转义字符.txt

    转义字符是编程语言中一个重要的概念,它们用于在源代码中表示特殊字符或控制序列。根据提供的文件信息,我们可以深入探讨转义字符在Java中的应用及其背后的原理。 ### 转义字符概述 转义字符是源代码中用于表示不...

    Mybatis在Mapper.xml文件中的转义字符处理方式.pdf

    为了解决这个问题,Mybatis提供了一些处理转义字符的方式,以确保SQL语句能够正确地写入Mapper.xml文件中并被解析。 在Mapper.xml文件中处理转义字符的常见方法主要有以下几种: 1. 常用的XML转义字符写法 在XML中...

    Python 转义字符逐个详解

    Python 转义字符逐个详解。一次性全面了解所有转义字符的含义及其用法。

    C语言常用转义字符表[参考].pdf

    C语言常用转义字符表 C语言中的转义字符是指在字符常量或字符串中使用的一些特殊字符,以表达一些不可见或不可打印的字符。这些字符在ASC II码表中有着特定的含义,以下是常用的转义字符: * \o 空字符 (NULL) :...

    JAVA转义字符

    ### JAVA转义字符详解 在Java编程语言中,转义字符是一种特殊的形式,用于表示一些预定义的字符或控制字符。这些字符对于处理文本、字符串以及格式化输出等任务至关重要。本文将详细介绍Java中的转义字符,包括它们...

    HTML 转义字符串

    为了解决这个问题,我们需要使用转义字符序列来代替这些特殊字符。 例如,小于号 `的转义序列是 `&lt;`,大于号 `&gt;` 的转义序列是 `&gt;`,和号 `&` 的转义序列是 `&amp;`。这样,即使在文本中出现这些特殊字符,...

    html页面转义字符对照表

    这些转义字符通常由一个“&”字符开头,后面跟着表示该字符的代码或者名称,最后以一个“;”结束。这种方式可以确保HTML解析器能够正确地解释并展示这些特殊字符。 #### 基本转义字符 1. **空格(&#32;)**: 转义...

    转义字符串的一些资料

    转义字符串的一些资料 转义字符串是计算机编程语言中的一种特殊字符序列,用于表示不可打印的 ASCII 控制符或特殊字符。它的主要作用是将不可打印的 ASCII 控制符转换为可打印的字符,以便在不同的计算机系统中进行...

Global site tag (gtag.js) - Google Analytics