是否可以将int数组
转换为char数组
?如果可以,如何
实现?
我目前正在开发一个项目,需要创建一个包含字母表的char数组
。我的当前代码创建了一个int数组
(应该在一行内将其转换
为char数组
):
return IntStream.range('a', 'z' + 1).toArray();
是否可以将int数组
转换为char数组
?如果可以,如何
实现?
我目前正在开发一个项目,需要创建一个包含字母表的char数组
。我的当前代码创建了一个int数组
(应该在一行内将其转换
为char数组
):
return IntStream.range('a', 'z' + 1).toArray();
是的,我们缺少一个生成字符数组的流方法。也许需要一个完整的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]
IntStream.range('a', 'z' + 1)
can be replaced with IntStream.rangeClosed('a', 'z')
- PshemoIntStream.range('a','z'+1)
),但无论如何,它显然更易读。 - Ole V.V.从Java-11开始,您可以使用.mapToObj(Character::toString)
代替.mapToObj(c -> Character.toString((char) c))
,这样你的代码会变得更加简洁:
return IntStream.rangeClosed('a', 'z')
.mapToObj(Character::toString)
.collect(Collectors.joining())
.toCharArray();
让我们保持一行:
return IntStream.range('a', 'z' + 1).mapToObj(i -> Character.valueOf((char) i)).toArray(Character[]::new);
IntStream
转换为 Stream<Character>
。请注意,在许多计算方面,字符和整数本质上是相同的,因此这一步可能是不必要的(特别是对于比较)。
编辑:
修复上述行以使其功能正常,有更好的解决方案,但我仍在寻找它。它目前返回一个 Character[]
数组。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数组,因为它们是完全不同的类型。
有两种可能的选择:
1)创建一个char数组并从int数组中复制每个值 2)使用通用列表或集合。您可以简单地使用它进行转换
Character.forDigit(a, 10)
的方法。 - Vishal Goyalint[]
强制转换为char[]
。此外,你的当前代码无法工作,因此它有多短并不重要。优化的第一条规则:它必须能够工作。由于Java 8没有CharStream
,所以你应该使用普通的for
循环来完成。这只需要3行代码(带有返回语句则为4行),而且它可行! - Andreas