将 int 数组转换为 char 数组

Converting int array to char array

是否可以 cast 一个 int array 到一个 char array?如果是 - how?


我目前正在做一个项目,我需要 create an char array 包含 alphabetMy 当前 code 创建一个 int array(应该是 convertedchar array - 在一行中! ):

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

那么让我们保持一行:

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

这从 IntStream 转换为 Stream<Character>。请记住,就许多计算而言,字符和整数本质上是相同的,因此这一步可能是不必要的(特别是对于比较)。

编辑:

修复了上面的行,使其正常运行,有更好的解决方案,但我仍在尝试再次找到它。它目前 returns 一个 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;

不能将 int 数组转换为 char 数组,因为类型完全不同。

有 2 个可能的选项:

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

是的,我们缺少生成 char 数组的流方法。也许是整个 CharStream class。无论如何,不​​,你不能在 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]

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

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