Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Overview

In this short tutorial, we’ll explore different ways of converting a char array to an int array in Java.

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.

2. Using Character Class

The Character class wraps a char value in an object. It provides various methods to work and manipulate primitive characters as objects.

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.

2.1. Character#getNumericValue()

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.

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.

An important caveat is that if the specified character does not have any int value, -1 is returned instead.

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

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.

Now, let’s exemplify how to use digit() to convert an array of characters into an array of integers:

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.

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

Alternatively, we can use the stream API to process the char array to int array conversion. So, let’s see it in practice:

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.

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.

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

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:

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.

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

In this short article, we explained in detail how to convert a char array into an int array in Java.

As always, the full code used in the article is available over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.