StringBuilder 的 toString 函数与 Java 8 流

问题描述 投票:0回答:1

String
转换为
IntStream
,对其进行排序并得到
StringBuilder
返回。在调用
toString
后,我看到连接的 ASCII 值与排序的值 字符串格式的字符。这是为什么?解决办法是什么?

class Solution {
    public static void main(String[] args) {
        String s  = "zwdacb";
        StringBuilder sb = s.chars().sorted().collect(()->new StringBuilder(),
                (x,y)->x.append(y),(StringBuilder sb1, StringBuilder sb2)->sb1.append(sb2));
        System.out.println(sb.toString());

    }
}

输出

979899100119122

java java-8 java-stream functional-java
1个回答
0
投票

您看到的输出是按排序顺序连接字符的 ASCII 值的结果,而不是字符本身。发生这种情况是因为

sorted()
方法返回字符值(ASCII 值)的
IntStream
,当您将这些值收集到
StringBuilder
中时,它们将被视为整数值。

试试这个:

public static void main(String[] args) {
    String s = "zwdacb";
    String sortedString = s.chars()
            .sorted()
            .collect(StringBuilder::new, (sb, c) -> sb.append((char) c), StringBuilder::append)
            .toString();
    System.out.println(sortedString);
}
© www.soinside.com 2019 - 2024. All rights reserved.