1. 概述

在这个简短教程中,我们将探讨在Java中将char数组转换为int数组的不同方法。

首先,我们将使用Java 7中的类和方法。然后,我们将了解如何使用Java 8的流API实现相同的目标。

2. 使用Character

Character类将char值封装在一个对象中。它提供了一系列方法,用于像对象一样处理和操作基本字符。

这些便捷的方法包括getNumericValue()digit()。让我们深入了解一下如何使用它们将char数组转换为int数组。

2.1. Character.getNumericValue()

这个方法提供了一种简单而直接的方式,返回给定字符的整数值。例如,字符'6'会返回6。

让我们实际操作一下:

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;
}

如我们所见,我们遍历了char数组,然后调用getNumericValue()获取每个字符的整数值。

重要的是,如果指定的字符没有整数值,将返回-1。

请注意,我们可以将传统的循环重写为更函数式的方式:

Arrays.setAll(ints, i -> Character.getNumericValue(chars[i]));

现在,让我们添加一个测试用例:

@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()

通常,digit(char ch, int radix)是另一个可以用来解决核心问题的方法。此方法根据指定的基数返回给定字符的数值。

现在,让我们举例说明如何使用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;
}

简而言之,最常见的基数是10,表示十进制系统(0-9)。例如,在基数10中,字符'7'等于7。

最后,我们将创建另一个测试用例以确认我们的方法:

@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. 使用流API

另外,我们可以使用流API来处理char数组到int数组的转换。让我们实践一下:

int[] usingStreamApiMethod(char[] chars) {

    return new String(chars).chars()
      .map(c -> c - 48)
      .toArray();
}

如上所示,我们从char数组创建了一个String对象,然后使用chars()map()方法将每个字符转换为int值。

请注意,字符'0'在ASCII中是48,'1'是49,以此类推。因此,'0' - 48等于0,依此类推。这就是为什么减去48将字符'0'..'9'转换为0..9的值。

接下来,让我们添加另一个测试用例:

@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. 使用Integer.parseInt()

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;
}

在这里,我们需要先将每个字符转换为字符串,然后再返回整数值。

当然,我们将创建一个测试用例来单元测试我们的方法:

@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. 总结

在这篇短文中,我们详细解释了如何在Java中将char数组转换为int数组。

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