跳至主要內容

11-字符编码和字符串

AI悦创原创Java体系课Java体系课大约 6 分钟...约 1658 字

0. 目录

  • 什么是字符集和编码
  • 编码和字符集介绍
  • ASCII 码和转义符(escape character)
  • 字符串的“加法”

1. 什么是字符集和编码

1.1 什么是字符集(Charset)

  • 字符集就是字符的集合。一般会包含一种语言的字符。比如:GBK,是包含所有常用汉字字符的字符集。ASCII 是包含英文字符的字符集。
  • 字符就是 Java 中的 char,char 是 character 的简写。

1.2 什么是编码(Encoding)

  • char 代表一个字符,char 的本质也是数字。将数字映射到字符,就叫编码。
  • 将一个字符集映射到数字,就是给这个字符集编码。编码是有标准的,所有的计算机系统按照同一个编码标准执行。「我这边 65 代表 A,在全世界的计算机里面,65 都是代表 A。
  • 有时候编码和字符集会混用。因为,计算机只认识数字。计算机要显示字符的话,就需要用数字来代表。也就是映射的数字,一般情况下都是混用的」
  • 在所有编程语言里,所有的字符都是由数字表示的,数字是通过编码来映射到一个个字符的。

2. 编码和字符集介绍

2.1 常用的字符集简介

  • ASCII 码,ASCII 表:https://baike.baidu.com/item/ASCII/309296#3open in new window
  • Unicode 包含世界上所有常用字符,编码也有几种,包括 UTF-8(8-bit Unicode Transformation Format ),UTF-16 等。
    • 「8 bit 不是只有 8 位,它是有标志的,它是可以扩展的。在 UTF-8 里面,它用几个字符都是不确定的。有可能有一个,有可能有三个。它怎么判断的呢,看它的第一位,类似我们的符号位一样。如果第一位是 1 的话,那它知道,后面那个 byte 还是属于我这字符的,那如果后面还是 1 的话,那也会认为是这个字符——这样也就会导致,它会把两个或者三个等其它的 byte 连接在一起。不用纠结,不需要细究!」
  • Unicode,GBK 等所有常用的字符集,都会兼容 ASCII。举个例子,字符 A 在这些所有常用的字符集里,都是对应数字 65。

2.2 Java 中的字符集

  • Java 中用的是 UTF-16 编码的 Unicode。
  • UTF-16 用 16 个 bit,来表示字符,即两个 byte,这也是 char 占用两个 byte 的原因。当把 char 转成数字的时候,需要用 int——因为它(char)没有正负号。「1 byte = 8 bit,16 bit 也就是 2 byte ->>> char」

3. ASCII 码和转义符(escape character)

3.1 如何输出特殊字符「比如:有些字符键盘敲不出来」

  • ASCII 码 +char,通过 ASCII 表可以找到需要的字符对应的数字。将这个数字转换为 char, 然后输出这个 char。 ASCII 表:https://baike.baidu.com/item/ASCII/309296#3open in new window
  • 转义符。转义符用来给字符赋值,也可以用在字符串里面,作为字符串中的一个字符。
  • PS:比如,我键盘上的 A 坏了,我怎么才能输出一个 A 呢,

3.2 转义符语法和常用的转义符

  • \n,换行符
  • \",双引号
  • \t,制表符
  • \uXXXX,unicode 编码对应的字符。
public class ComplexCharInString {
    public static void main(String[] args) {
        String content = "a\tb\tcc\tee\t";
        String align = "1111222233334444";
        System.out.println(content);
        System.out.println(align);
    }
}

输出:

a	b	cc	ee	
1111222233334444

从上面的结果可以知道,每一个的 \t 都是成立的。都是从数字的开始,一一对应的。

如果,这个时候要输出一个包含 “ 的内容,该怎么办呢?

demo1
public class ComplexCharInString {
    public static void main(String[] args) {
        String content = "a\tb\"\tcc\tee\t";
        System.out.println(content);
    }
}

我们来看看,\u 这种形式的:

public class ComplexChar {
    public static void main(String[] args) {
        int a = 65;
        char cha = (char) a;

        char zang = '\u81e7';

        System.out.println(cha);

        System.out.println(zang);
    }
}

4. 字符串的“加法” 「所谓加法,其实是拼接」

任何的变量或者其它都可以和字符串拼接,相当于是把它加到字符串里面。

4.1 将变量穿插在字符串中输出

  • 字符串可以和任何类型进行加法运算,则会将这个值的字符拼接到字符串上。
  • 字符串也可以使用 += 操作符来拼接
  • 字符串的加法运算符符合加法运算符本身的优先级
public class StingConcat {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = a + b;
        System.out.println("a + b=" + c);  // 把被加的 c 转成字符串

        boolean aBiggerThanB = a > b;
        System.out.println("a > b 是" + aBiggerThanB + "的");

        System.out.println("a + b=" + a + b); // 考运算符优先级

        System.out.println("a + b =" + (a + b));

        System.out.println("a * b=" + a * b);

    }
}

4.2 字符串不是 Java 中的基本数据类型

  • 字符串类型的名字叫做 String
  • 虽然 String 不是 Java 中的基础类型,但是也可以使用类似的语法 String str = “abc”; 来创建。开始的时候将其当成基础类型,更容易理解。
  • String 不是 Java 中的保留字。 我创建一个 int String = 999;是不会报错的;

4.3 String 的加法不会改变原 String 变量的值,改变其值要用赋值语句

public class StringVariable {
    public static void main(String[] args) {
        int a = 10;
        String str = "a的值是";
        str = str + a;
        System.out.println(str);

        String s2 = "a的值是";
        System.out.println(str + a);
        System.out.println(s2);
    }
}

输出:

a的值是10
a的值是1010
a的值是

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

公众号:AI悦创【二维码】

AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:QQopen in new window

方法二:微信:Jiabcdefh

上次编辑于:
贡献者: AndersonHJB
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度