Java string 中的 unicode 字符按照 string 格式存储

在 Java 中,字符串(String)是一个非常重要的数据类型,它用于表示一系列字符。在 Java 中,字符串是不可变的,这意味着一旦字符串被创建,就无法更改它的内容。这种不可变性使得字符串操作更加安全和高效。

在字符串中,我们经常会遇到需要处理 Unicode 字符的情况。Unicode 是一种国际标准,用于表示世界上所有的字符,包括 ASCII 字符和其他语言的字符。在 Java 中,每个字符都被编码为 Unicode 码点(Unicode code point),它是一个非负整数,范围从 U+0000 到 U+10FFFF。

本文将介绍如何在 Java 字符串中存储和处理 Unicode 字符,并提供一些代码示例。希望通过本文的介绍,读者能够更好地理解和应用字符串中的 Unicode 字符。

Unicode 字符的存储

在 Java 中,字符串是以 UTF-16 编码方式存储的,它是一种可变长度的编码方案。这意味着每个字符可能占用 2 个或 4 个字节的存储空间。对于 ASCII 字符(Unicode 码点范围从 U+0000 到 U+007F),它们只需要占用 2 个字节的存储空间,与标准的 ASCII 编码一致。

对于非 ASCII 字符,它们的 Unicode 码点范围从 U+0080 到 U+10FFFF。在 Java 中,这些字符会被编码为一个或多个 Unicode 代码单元(Unicode code unit),每个代码单元占用 2 个字节的存储空间。对于码点小于等于 U+FFFF 的字符,它们仅需要一个代码单元即可表示;而对于码点大于 U+FFFF 的字符,则需要两个代码单元来表示。

在 Java 中,可以使用 char 类型来表示一个 Unicode 代码单元。char 类型是一个 16 位的无符号整数,范围从 U+0000 到 U+FFFF。可以使用转义序列 \u 加上 4 个十六进制数字来表示一个 Unicode 字符,例如 \u0041 表示字符 'A'。

下面是一个示例代码,演示了如何在 Java 中存储 Unicode 字符:

String str = "Hello, 你好!";
System.out.println(str.length()); // 输出 9
System.out.println(str.charAt(7)); // 输出 "好"

在上面的示例中,字符串 str 包含了 9 个字符,其中包括一个中文字符。在调用 length() 方法时,会返回字符串的字符长度,即 9。而调用 charAt() 方法并传入索引 7 时,会返回字符串中位于索引位置 7 的字符 '好'。

Unicode 字符的处理

在 Java 中,字符串类 String 提供了各种方法来处理 Unicode 字符。下面介绍一些常用的方法:

获取指定索引处的字符

可以使用 charAt() 方法来获取字符串中指定索引处的字符。该方法接受一个整数索引作为参数,并返回对应位置的字符。需要注意的是,索引从 0 开始计数。

String str = "Hello";
char ch = str.charAt(1); // 获取索引 1 处的字符 'e'

获取指定索引处的 Unicode 码点

可以使用 codePointAt() 方法来获取字符串中指定索引处的 Unicode 码点。该方法接受一个整数索引作为参数,并返回对应位置的 Unicode 码点。需要注意的是,对于一个占用两个代码单元的字符,该方法只返回它的第一个代码单元。

String str = "你好!";
int codePoint = str.codePointAt(0); // 获取索引 0 处的码点 20320

获取指定码点位置的索引

可以使用 indexOf() 方法来获取字符串中指定码点位置的索引。该方法接受一个整数码点作为参数,并返回第一次出现该码点的索引位置