字符串转字节数组与字符数组

在处理字符串转换为字节数组或字符数组的问题时,Java 提供了几种不同的方法。

getBytes方法 获取字符串的字节数组

getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。

    public static void main(String[] args) {
        String str = "Java";
        byte[] bytes = str.getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
    }
74
97
118
97

除了使用默认字符集,还可以指定字符集:

    public static void main(String[] args) {
        String str = "Java";
        try {
            System.out.println("----UTF-8----");
            byte[] bytes = str.getBytes("UTF-8");
            for (int i = 0; i < bytes.length; i++) {
                System.out.println(bytes[i]);
            }
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }

        byte[] bytes1 = str.getBytes(Charset.defaultCharset());
        byte[] bytes2 = str.getBytes(StandardCharsets.UTF_8);

        System.out.println("----GBK----");
        byte[] bytes = str.getBytes(Charset.forName("GBK"));
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
    }

getBytes的有参数方法,在字符集不受支持时抛出异常 UnsupportedEncodingException.

—-UTF-8—-
74
97
118
97
—-GBK—-
74
97
118
97

getChars方法 获取字符数组

将字符从此字符串复制到目标字符数组。
要复制的第一个字符位于索引srcBegin处;要复制的最后一个字符位于索引srcEnd-l处(因此要复制的字符总数是srcEnd-srcBegin)。

方法声明

public void getChars(int srcBegin,int srcEnd,char[]dst,int dstBegin)

  • srcBegin:字符串中要复制的第一个字符的索引。
  • srcEnd:字符串中要复制的最后一个字符之后的索引。
  • dst:目标数组。
  • dstBegin:目标数组中的起始偏移量。

抛出异常

如果下列任何一项为true,则抛出IndexOutOfBoundsException异常。

  • srcBegin为负。
  • srcBegin大于sreEnd。
  • srcEnd大于此字符串的长度。
  • dstBegin为负。
  • dstBegin+(srcEnd-srcBegin)大于dst.length。

这里将字符串 Java string 中的0到第4个字符(索引是0~3),复制到目标数字 res,从第0个位置开始复制。

    public static void main(String[] args) {
        String text = "Java string";
        char[] res = new char[4];
        text.getChars(0,4,res, 0);
        for (int i = 0; i < res.length; i++) {
            System.out.println(res[i]);
        }
    }

结果如下:

J
a
v
a

toCharArray() 获取子字符串

将字符串转换成一个字符数组。返回值为一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。

方法声明

public char[] toCharArray()

返回值:一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。

下面代码使用toCharArray函数将字符串text转换成一个数组,并将转换后的结果赋值给char[]变量chars。

    public static void main(String[] args) {
        String text = "Hello Java";
        char[] chars = text.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
    }
H
e
l
l
o

J
a
v
a

toCharArray() 相当于 getChars() 的特殊版本:

getChars(0, string.length(), res, 0)

从 0 开始复制 string 的所有字符到 res。

实际上,二者底层都使用到了 System 实现:

System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);

总结

  • getBytes() 方法用于将字符串编码为字节序列,可以指定字符集。
  • getChars() 方法用于将字符串的一部分复制到字符数组中,需要指定源字符串的索引范围和目标数组。
  • toCharArray() 方法用于将整个字符串转换为字符数组,相当于 getChars() 方法的特殊情况,复制整个字符串到新数组。

在实际应用中,应根据需要选择合适的方法进行字符串与数组之间的转换。注意,当使用 getBytes() 方法时,如果指定的字符集不受支持,可能会抛出 UnsupportedEncodingException 异常。

转载请注明出处:码谱记录 » 字符串转字节数组与字符数组
标签: