如何解决将 char[][] 转换为 char[]
我的目标是打印一个像
这样的新字符串char[] result = someArray();
System.out.print(new string(result))
我在我的任务 char[][]
中使用 2 维数组。
我想将我的 char[][]
数组转换为 char[]
如何直接从 char[][]
打印单个字符串或轻松将其转换为 char[]
?
Arrays.toDeepString()
对我不起作用,因为它以 [[a,b,c],[d,e,f]]
格式打印,而我正在寻找 abcdef
的输出。
解决方法
对于每个“行”字符数组,使用 String(char[])
构造函数,然后加入结果字符串,可以轻松地将二维字符数组转换为单个字符串:
static String singleString(char[][] arr) {
return Arrays.stream(arr)
.map(String::new)
.collect(Collectors.joining(""));
}
使用 StringBuilder
的“Streamless”版本可能如下所示:
static String singleString(char[][] arr) {
StringBuilder sb = new StringBuilder(
arr.length * (arr.length > 0 ? arr[0].length : 0));
for (char[] row : arr) {
sb.append(new String(row));
}
return sb.toString();
}
,
您可以执行以下操作:
-
stream
流式传输一维数组。 -
String::valueOf
将每个数组映射到一个字符串 -
joining
使用空分隔符连接字符串。
char[][] chs = {{'a','b'},{'c','d','e'}};
String str = Arrays.stream(chs)
.map(String::valueOf)
.collect(Collectors.joining());
System.out.println(str);
印刷品
abcde
如果要单独打印每个数组,可以执行以下操作:
for (char[] ch : chs) {
System.out.println(Arrays.toString(ch));
}
印刷品
[a,b]
[c,d,e]
,
根据您要实现的逻辑简单地迭代所有数组并连接行/列。
假设您有以下内容:
[[a] [a] [a]]
[[b] [b] [b]]
[[c] [c] [c]]
迭代第一行,并用“aaa”创建一个新的字符数组,第二个 - “bbb”,第三个 - “ccc”。
[aaa][bbb][ccc]
,
或者:
char[][] matrix_char = {{'a','e'}};
String result = Arrays.deepToString(matrix_char).replaceAll("[\\[,\\]]","");
System.out.println(result);
或者直截了当:
char[][] matrix_char = {{'a','e'}};
StringBuilder result = new StringBuilder();
for (char[] row : matrix_char)
for (char col : row)
result.append(col);
System.out.println(result.toString());
输出:
abcde
,
您可以将所有这些字符连接成一个字符串,然后将该字符串转换为一维字符数组。此方法适用于字符代码点,因此它也可以处理不可打印的字符:
char[][] arr2d = {{'a','b','c'},{'d'},{'e',10,0}};
char[] arr = Arrays.stream(arr2d)
// concatenate each subarray into one string
.map(String::new)
// join all strings into a single string
.collect(Collectors.joining())
// convert this string to a character array
.toCharArray();
// output
for (char ch : arr) {
// integer codepoint and unicode name of the character
System.out.println(0 + ch + " - " + Character.getName(ch));
}
输出:
97 - LATIN SMALL LETTER A
98 - LATIN SMALL LETTER B
99 - LATIN SMALL LETTER C
100 - LATIN SMALL LETTER D
101 - LATIN SMALL LETTER E
10 - LINE FEED (LF)
0 - NULL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。