Java基础教程

第一章: 开启Java学习之旅

第二章: 掌握计算机基础知识

第三章: 掌握命令行基础知识

第四章: 我的第一个Java程序

第五章: Java编程必备基础

第六章: Java编程的核心:控制结构

第七章: Java面向对象基础

第八章: Java面向对象进阶

第九章: Java字符串类型

第十章: Java数组与数据结构

第十一章: Java高级数据结构

第十二章: Java并发编程基础

首页 > Java基础教程 > 第九章: Java字符串类型 > 9.1节: 字符串的基础概念

9.1节: 字符串的基础概念

薯条老师 2021-12-11 14:41:49 180395 0

编辑 收藏

广州番禺Python, Java小班周末班培训

第四期线下Java, Python小班周末班已经开课了,培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析, Java中高级工程师培训。授课详情请点击:http://chipscoco.com/?cate=6    

9.1.1 理解字符串

理解字符串,不仅要知道它是什么,还要知道它底层的数据结构。那么,什么是字符串?在Java中使用英文的双引号括住的都是字符串,比如"你好世界"。字符串是一种线性的序列结构。理解这种数据结构,先观察下图所示的线性表:

上图表示的是字符串"你好世界",从图中可以看出,字符与字符之间在逻辑上构成直线的关系,字符是按序进行排列的,所有的字符空间对应着一块连续的内存,这种结构就叫做线性的顺序存储结构。图中的每一个格子表示一个内存块,内存块里存储了字符的数字编码。

9.1.2 字符串的类型与定义

Java字符串的类型名为String, 同数组一样,也是采用直接定义法和new操作符来定义字符串。直接定义字符串的基本语法:

String string = "string";

小写的string表示字符串的变量名,双引号括住的就是字符串。

代码实例-直接定义字符串

public class HelloJava{
    public  static void main(String[] args) {
        // 定义一个名为name的字符串,值为薯条老师
        String name = "薯条老师";
    }
}

使用new操作符定义字符串的基本语法:

String string = new String("string");

代码实例-new一个字符串对象

public class HelloJava{
    public  static void main(String[] args) {
        // 构造一个名为name的字符串对象,值为Lohan
        String name = new String("Lohan");
    }

9.1.3 字符的数字编码

在第三章中已经介绍过,计算机只能处理二进制,为了让计算机也能对字符进行处理,需要对字符进行编码。所谓编码,是指用数字来对字符进行表示。不同的表示方法,即对应不同的字符编码。

一旦用数字来表示特定的字符,那么就可以对字符进行处理。当然计算机并不是直接处理字符,而是处理字符所对应的数字编码(数字编码可以转换为二进制)。

9.1.4 常用的字符编码

最早的字符编码为ASCII编码,这种编码使用一个字节来表示一个字符。一个字节能表示的范围是0-255,也就是说,这种编码最多只能表示256个字符。ASCII编码无法表示汉字等其它字符,为了满足其它地区的需要,又出现了多字节编码。

(1) ASCII

ASCII码,全称为美国信息交换标准码,一种使用7个或8个二进制位进行字符编码的方案,最多可以包含256个字符。基本的 ASCII 字符集一共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。下图为ASCII字符的码表:

图片.png 

(2) UNICODE

在UNICODE编码中,为每种语言中的每个字符设定了统一并且唯一的二进制编码, 这个编号范围从 0x000000 到 0x10FFFF,每个字符对应一个唯一的UNICODE数字码,UNICODE编码的形式为:在数字码(十六进制)前面加上U+。例如:"爱"的UNICODE是U+7231。

(3) UTF-8

UTF-8,是一种针对UNICODE的可变长度字符编码, 不同于UNICODE编码采用固定长度的字节数来表示字符, UTF-8使用的字节数是可变的,比如ASCII字符,在UTF-8编码中仍使用一个字节来进行编码,对于汉字等字符使用的是3个字节来进行编码。

(4) GBK

GBK编码是汉字编码字符集,采用的是单双字节变长编码,英文字符使用单字节编码,完全兼容ASCII码,中文部分采用双字节编码。

9.1.5 字符串的编码与解码

通过字符串对象的getBytes方法,可以获取字符串以特定编码方式编码后的字节码。

下表为getBytes方法的使用说明:

方法名

描述

String.getBytes(String charsetName)

参数charsetName用来传递编码类型,方法的返回值为一个byte数组。

代码实例-获取字符串的UTF-8编码

public class HelloJava{
    public  static void main(String[] args) {
        // 构造一个名为name的字符串对象,值为Lohan
        String name = new String("Lohan");
        // 获取name字符串的UTF-8编码,StandarCharsets是Java内置的标准字符集类
        byte [] bytes = name.getBytes(StandardCharsets.UTF_8);
        System.out.println(bytes);
    }
}

有编码自然就有解码,解码是将字节码再转换成Java字符串。在使用new操作符来构造字符串对象时,可传递一个字节码,并指定编码类型来解码:

String string = new String(byte bytes[], String charsetName);

代码实例-将字节码转换为字符串

public class HelloJava{
    public  static void main(String[] args) {
        // 构造一个名为name的字符串对象,值为Lohan
        String name = new String("Lohan");
        // 获取name字符串的UTF-8编码,StandarCharsets是Java内置的标准字符集类
        byte [] bytes = name.getBytes(StandardCharsets.UTF_8);
        
        // 将bytes转换为字符串,指定的字符编码类型为UTF-8
        name = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(name);
    }
}

读者需注意的是,在对bytes类型进行解码时,编码方式必须兼容,否则会出现乱码。在工作中使用较多的字符编码主要是ascii, utf-8,gbk等编码。utf-8,gbk均向下兼容ascii,但ascii却不能向上兼容utf-8,gbk。此外,utf-8与gbk也互不兼容。

9.1.6 转义字符

编程语言中的转义字符是反斜杠符号'\'+字符构成的特殊字符,通常使用转义字符来表示字符集中定义的字符,如ASCll字符集里面的换行符。下表是常用的转义字符:

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\?

代表一个问号

063

\0

空字符

000

使用转义字符可以避免产生歧义,比如通过转义字符\"来表示一个包含引号的字符串:

"\""

如果没有转义字符,那么系统无法识别用户究竟定义的是一个包含引号的字符串,还是一个三引号。使用转义字符还可以定义字符串的输出格式,比如定义多行字符串。

代码实例-定义多行字符串

public class HelloJava{
    public  static void main(String[] args) {
        // 在字符串中加上换行符,输出时会自动换行
        String content = "书山有路勤为径\n学海无涯苦作舟";
        System.out.println(content);
    }
}

执行以上程序时,在IDEA中会按以下格式进行输出:

书山有路勤为径

学海无涯苦作舟

读者在练习时,还可以加上其它的转义字符来进行测试。

9.1.7 高薪就业班


欢迎 发表评论: