将int数组转换为char数组

时间:2016-10-07 07:35:21

标签: java arrays converter primitive-types

是否可以cast int arraychar array?如果是这样 - how

我目前正在开展一个项目,我需要create an char array包含alphabet我的当前code创建了一个int arrayconverted到一个行中的char array - ) :

return IntStream.range('a', 'z' + 1).toArray();

4 个答案:

答案 0 :(得分:5)

是的,我们缺少一个生成char数组的stream方法。也许是一个完整的CharStream类。在任何情况下,不,你不能在int[]char[]之间进行投射。

与此同时,这是一个很长的路线,但它确实有效:

    return IntStream.rangeClosed('a', 'z')
            .mapToObj(c -> Character.toString((char) c))
            .collect(Collectors.joining())
            .toCharArray();

这会产生一个char[]包含

[a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]

答案 1 :(得分:1)

Java-11 开始,您可以使用.mapToObj(Character::toString) 而不是.mapToObj(c -> Character.toString((char) c)),因此您的总体代码可以归结为:

return IntStream.rangeClosed('a', 'z')
        .mapToObj(Character::toString)
        .collect(Collectors.joining())
        .toCharArray();

答案 2 :(得分:0)

让我们保持一行:

return IntStream.range('a', 'z' + 1).mapToObj(i -> Character.valueOf((char) i)).toArray(Character[]::new);

这会将IntStream转换为Stream<Character>。请记住,字符和整数在许多计算方面基本相同,因此这一步可能是不必要的(特别是对于比较)。

修改

修正了上面的功能,有一个更好的解决方案,但我仍然试图再次找到它。它目前返回Character[]数组。

如果没有1行限制,只需重新制作数组,将a视为0索引。

char[] back = new char[('z' + 1) - 'a'];
IntStream.range('a', 'z' + 1).forEach(i -> back[i - 'a'] = (char) i);
return back;

答案 3 :(得分:0)

您无法将int数组转换为char数组,因为存在完全不同的类型。

有两种可能的选择:

1)创建一个char数组并从int数组中复制每个值 2)使用通用列表或集合。您可以简单地将其用于投射