1. 概述

在Java中,String 是一个常见的类型,而 char 则是一个基本类型。

在这个教程中,我们将探讨如何在Java中将String对象转换为char

2. 问题介绍

我们知道,char 只能包含单个字符,而String对象可以包含多个字符。因此,本教程将涵盖两种情况:

  • 源字符串为单个字符。
  • 源字符串为多字符。

对于第一种情况,我们可以轻松地获取单个字符作为char。例如,假设我们的输入是:

String STRING_b = "b";

转换后,我们期望得到字符 'b'。

对于第二种情况,如果源String是多字符字符串,但仍然希望得到单个char作为结果,我们必须分析需求来选择所需的字符,如第一个、最后一个或第n个字符。

在这个教程中,我们将提供一个更通用的解决方案。我们将把源String转换为一个char数组,该数组包含了字符串中的每个字符。这样,我们可以根据需要选择任何元素。

我们以STRING_Baeldung为例:

String STRING_Baeldung = "Baeldung";

现在,让我们看看具体的操作。

3. 单字符字符串

Java的String类提供了charAt()方法,可以从输入字符串中获取指定索引(从0开始)的字符作为char。因此,我们可以直接调用getChar(0)将单个字符String转换为char

assertEquals('b', STRING_b.charAt(0));

但是,需要注意的是,如果输入为空字符串,charAt()方法会抛出StringIndexOutOfBoundsException

assertThrows(StringIndexOutOfBoundsException.class, () -> "".charAt(0));

所以在调用charAt()方法之前,我们应该检查输入字符串是否非空。

4. 多字符字符串

我们已经学会了使用charAt(0)将单个字符String转换为char。如果输入是多字符String,并且我们确切知道要转换成char的字符,我们仍然可以使用charAt()方法。例如,我们可以从输入字符串“Baeldung”中获取第四个字符('l'):

assertEquals('l', STRING_Baeldung.charAt(3));

此外,我们可以使用String.toCharArray()获取一个包含所有字符的char[]数组:

assertArrayEquals(new char[] { 'B', 'a', 'e', 'l', 'd', 'u', 'n', 'g' }, STRING_Baeldung.toCharArray());

值得一提的是,toCharArray()方法对空字符串输入同样适用。它返回一个空的char数组作为结果:

assertArrayEquals(new char[] {}, "".toCharArray());

除了toCharArray()String.getChars()方法还可以从给定的String提取连续的字符到char数组。该方法接受四个参数:

  • srcBegin - 要复制的字符串中的第一个字符的索引(包括)
  • srcEnd - 不包括在内要复制的字符串中的最后一个字符的索引
  • dst - 目标数组,即我们的结果
  • dstBegin - 目标数组中的起始偏移量。我们将通过一个例子来讨论这一点。

首先,让我们从字符串“Baeldung”中提取“aeld”,并将其填充到预定义的char数组中:

char[] aeld = new char[4];
STRING_Baeldung.getChars(1, 5, aeld, 0);
assertArrayEquals(new char[] { 'a', 'e', 'l', 'd' }, aeld);

如上所示,要调用getChars(),我们首先需要一个char数组来存放结果。

在示例中,当我们调用getChars()时,我们将dstBegin设置为0。这是因为我们希望转换后的结果从数组aeld的第一个元素开始。

当然,有时我们可能希望结果覆盖数组的中间部分。这时,我们可以将dstBegin设置为所需的值。

接下来,让我们看另一个例子,将“aeld”转换为char并从第二个(索引=1)元素开始覆盖目标数组:

char[] anotherArray = new char[] { '#', '#', '#', '#', '#', '#' };
STRING_Baeldung.getChars(1, 5, anotherArray, 1);
assertArrayEquals(new char[] { '#', 'a', 'e', 'l', 'd', '#' }, anotherArray);

所以,正如我们所见,我们传递dstBegin=1给方法,并得到预期的结果。

5. 总结

在这篇文章中,我们学习了如何在Java中将String转换为char

如往常一样,本文中使用的代码可以在GitHub上找到。