1. Overview
1.概述
In this short tutorial, we’ll explore different ways of converting a char array to an int array in Java.
在本简短教程中,我们将探讨在 Java 中将 char 数组转换为 int 数组的不同方法。
First, we’ll use methods and classes from Java 7. Then, we’ll see how to achieve the same objective using Java 8 Stream API.
首先,我们将使用 Java 7 中的方法和类。然后,我们将了解如何使用 Java 8 Stream API 实现相同的目标。
2. Using Character Class
2.使用 字符类
The Character class wraps a char value in an object. It provides various methods to work and manipulate primitive characters as objects.
Character 类将 char 值封装在一个对象中。它提供了各种方法,用于将原始字符作为对象来处理和操作。
Among these handy methods, we find getNumericValue() and digit(). So, let’s dig in and see how to use them to convert a char array into an int array.
在这些方便的方法中,我们可以找到 getNumericValue() 和 digit() 方法。因此,让我们深入了解如何使用它们将 char 数组转换为 int 数组。
2.1. Character#getNumericValue()
2.1.字符#getNumericValue()</em
This method offers a straightforward and concise way to return the int value of the given character. For instance, the character ‘6’ will return 6.
该方法提供了一种简单明了的方法来返回给定字符的 int 值。例如,字符 ‘6’ 将返回 6。
So, let’s see in action:
那么,让我们来看看实际操作吧:
int[] usingGetNumericValueMethod(char[] chars) {
if (chars == null) {
return null;
}
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = Character.getNumericValue(chars[i]);
}
return ints;
}
As we can see, we iterated through the char array. Then, we called the getNumericValue() to get the integer value of each character.
正如我们所见,我们遍历了 char 数组。然后,我们调用 getNumericValue() 来获取每个字符的整数值。
An important caveat is that if the specified character does not have any int value, -1 is returned instead.
一个重要的注意事项是,如果指定的字符没有任何 int 值,将返回-1。
Please bear in mind that we can rewrite our traditional loop in a more functional way:
请记住,我们可以用更实用的方法重写传统的循环:
Arrays.setAll(ints, i -> Character.getNumericValue(chars[i]));
Now, let’s add a test case:
现在,让我们添加一个测试用例:
@Test
void givenCharArray_whenUsingGetNumericValueMethod_shouldGetIntArray() {
int[] expected = { 2, 3, 4, 5 };
char[] chars = { '2', '3', '4', '5' };
int[] result = CharArrayToIntArrayUtils.usingGetNumericValueMethod(chars);
assertArrayEquals(expected, result);
}
2.2. Character#digit()
2.2.字符#digit()</em
Typically, digit(char ch, int radix) is another method that we can use to address our central question. This method returns the numeric value of the given character based on the specified radix.
通常,digit(char ch, int radix) 是我们可以用来解决中心问题的另一种方法。该方法根据指定的弧度返回给定字符的数值。
Now, let’s exemplify how to use digit() to convert an array of characters into an array of integers:
现在,让我们举例说明如何使用 digit() 将字符数组转换为整数数组:
int[] usingDigitMethod(char[] chars) {
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = Character.digit(chars[i], 10);
}
return ints;
}
In short, the most common radix is 10, which denotes the decimal system (0-9). For example, the character ‘7’ in base 10 is simply equal to 7.
简而言之,最常用的弧度是 10,表示十进制(0-9)。例如,字符 “7 “在基数 10 中简单地等于 7。
Lastly, we’ll create another test case to confirm our method:
最后,我们将创建另一个测试用例来确认我们的方法:
@Test
void givenCharArray_whenUsingDigitMethod_shouldGetIntArray() {
int[] expected = { 1, 2, 3, 6 };
char[] chars = { '1', '2', '3', '6' };
int[] result = CharArrayToIntArrayUtils.usingDigitMethod(chars);
assertArrayEquals(expected, result);
}
3. Using the Stream API
3.使用流应用程序接口
Alternatively, we can use the stream API to process the char array to int array conversion. So, let’s see it in practice:
或者,我们可以使用流 API 来处理 char 数组到 int 数组的转换。那么,让我们来看看实际操作:
int[] usingStreamApiMethod(char[] chars) {
return new String(chars).chars()
.map(c -> c - 48)
.toArray();
}
As shown above, we created a String object from the char array. Then, we used the chars() and map() methods to transform each character into an int value.
如上所示,我们从 char 数组创建了一个 String 对象。然后,我们使用 chars() 和 map() 方法将每个字符转换为 int 值。
Please note that the character ‘0’ is 48 in ASCII, ‘1’ is 49, and so on. Thus, ‘0’ – 48 equals 0, and so on. This why subtracting by 48 translates the characters ‘0’..’9′ to the values 0..9.
请注意,字符 “0 “在 ASCII 码中是 48,”1 “是 49,以此类推。因此,’0′ – 48 等于 0,以此类推。因此,用 48 减去’0′.’9’,字符’0′.’9’就变成了数值 0…9。
Next, let’s add another test case:
接下来,我们再添加一个测试用例:
@Test
void givenCharArray_whenUsingStreamApi_shouldGetIntArray() {
int[] expected = { 9, 8, 7, 6 };
char[] chars = { '9', '8', '7', '6' };
int[] result = CharArrayToIntArrayUtils.usingStreamApiMethod(chars);
assertArrayEquals(expected, result);
}
4. Using Integer#parseInt()
4.使用 Integer#parseInt()
parseInt() is another great option to consider when converting a char into an int. This method lets us get the primitive int value of a given string:
parseInt() 是将 char 转换为 int 时另一个值得考虑的好方法。该方法可让我们获得给定字符串的原始 int 值:
int[] usingParseIntMethod(char[] chars) {
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = Integer.parseInt(String.valueOf(chars[i]));
}
return ints;
}
Here, we need to convert each character into a string first before returning the int value.
在这里,我们需要先将每个字符转换成字符串,然后再返回 int 值。
As always, we’ll create a test case to unit test our method:
像往常一样,我们将创建一个测试用例来对我们的方法进行单元测试:
@Test
void givenCharArray_whenUsingParseIntMethod_shouldGetIntArray() {
int[] expected = { 9, 8, 7, 6 };
char[] chars = { '9', '8', '7', '6' };
int[] result = CharArrayToIntArrayUtils.usingParseIntMethod(chars);
assertArrayEquals(expected, result);
}
5. Conclusion
5.结论
In this short article, we explained in detail how to convert a char array into an int array in Java.
在这篇短文中,我们详细介绍了如何在 Java 中将 char 数组转换为 int 数组。
As always, the full code used in the article is available over on GitHub.
一如既往,文章中使用的完整代码可在 GitHub 上获取。