java - 从 Arrays.toString(); 中删除一个值?

标签 java arrays string ascii

因此,目标是让用户给出一个字符串,然后控制台返回字符串中的字符及其频率。

输入“AAAAbbbbccdd 42424242 &&%%$#@”(减去引号)应该给出...

频率:2

.# 频率:1

$ 频率:1

% 频率:2

&频率:2

2 频率:4

4 频率:4

@频率:1

频率:4

b 频率:4

频率:2

频率:2

它们还应该根据 ASCII 表按字母顺序排序,但我现在不关心这一点。

这是我的方法的代码:

    public static void alphabeticalSort(String input)
{
    int[] ascii = new int[256];

    for (int i = 0; i < input.length(); i++) {
        char current = input.charAt(i);
        ascii[(int)current]++;
    }

    String asciiStr = Arrays.toString(ascii).replace("[", "").replace("]", "").replace(",", "\n freq:");
    System.out.println(asciiStr);

}

由于篇幅原因,我不会将输出粘贴到此处,但输出会读回 256 个元素数组的每个元素,并告诉我该字符出现了 0 次。有没有办法让打印字符串时所有出现0次的字符不显示?

最佳答案

您可以根据值简单地从数组中过滤出元素:

ascii = Arrays.stream(ascii).filter(x -> x > 0).toArray();

但这并没有多大用处:您会丢失频率与其频率所对应的字符之间的对应关系。

相反,过滤索引流:

IntStream.range(0, ascii.length).filter(x -> ascii[x] > 0)

此流为您提供数组中具有非零值的元素的索引。

您可以使用它来构建输出:

System.out.println(
    IntStream.range(0, ascii.length)
        .filter(x -> ascii[x] > 0)
        .mapToObj(x -> String.format("%s: freq %s", (char) x, ascii[x]))
        .collect(Collectors.joining("\n")));

关于java - 从 Arrays.toString(); 中删除一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879408/

相关文章:

java - 标签中的语法错误

javascript:插入空数组的意外行为

javascript - javascript如何将字符串转换为数字数组

C# 从 ListView 中提取字符串

java - 简而言之,后缀树的 Java 实现和用法?

java - 休息方法需要很长时间

java - 如何在Swing中逐渐旋转图像?

c# - 如何在 C# 中初始化一个空数组?

java - 手动创建 SOAP 请求 - 服务器接收空字符串作为参数

java - 字体突然改变 - Eclipse