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上找到。