【问题标题】:Removing duplicates from sorted Char array从已排序的 Char 数组中删除重复项
【发布时间】:2015-04-11 04:06:40
【问题描述】:

我正在尝试获取下面的字符串,将其转换为数组,对数组进行排序,然后取出所有重复项。我已经到了排序的部分,但是当我运行它以希望删除重复项时,它似乎打印的是位置而不是那里的值。

这也将空格计为长度,为此我的长度为 59。

我可以得到一些帮助来弄清楚我需要改变什么吗? 谢谢大家!

import java.util.*;

public class Challenge208 {

public static void main(String[] args) {

    String numbers = "3 1 3 4 4 1 4 5 2 1 4 4 4 4 1 4 3 2 5 5 2 2 2 4 2 4 4 4 4 1";
    char[] chars = numbers.toCharArray();
    Arrays.sort(chars);
    System.out.println(chars);

    int current = chars[0];
    boolean found = false;

    for (int i = 0; i < chars.length; i++) {
        if (current == chars[i] && !found) {
            found = true;
        }else if (current != chars[i]) {
            System.out.print(" " + current);
            current = chars[i];
            found = false;
        }
    }
    System.out.print(" " + current);

}
}

【问题讨论】:

  • 谢谢!我仍然有一个错误,我的输出有大量空格。有没有办法解决这个问题?
  • 嗯,这是一个肮脏的修复,但由于我不知道你的程序是什么,我相信字符串实例上的 .trim() 方法会摆脱不需要的空格。

标签: java arrays sorting character-arrays


【解决方案1】:

current 应该是 char 而不是 int。要消除空格,您可以打印 current 是否不是空格。

【讨论】:

    【解决方案2】:

    你可以使用treeset而不是使用数组。它会有一个排序的顺序并且没有重复。但是如果在你的场景中你需要数组在这种情况下首先你的当前变量是int而不是char并且你没有删除任何的重复项。您只是在找到该 char 时打印,即使该项目没有任何重复项并且仅用于 char[0]

    【讨论】:

      【解决方案3】:

      你得到的不是数字的索引,而是它的 ascii 值。更多详情:http://www.asciitable.com/ 但解决方法如下:

      import java.util.*;
      
      public class Challenge208 {
      
      public static void main(String[] args) {
      
      String numbers = "3 1 3 4 4 1 4 5 2 1 4 4 4 4 1 4 3 2 5 5 2 2 2 4 2 4 4 4 4 1";
      char[] chars = numbers.toCharArray();
      char[] results = new char[10];
      Arrays.sort(chars);
      System.out.println(chars);
      
      char current = chars[0];
      int size = 0;
      boolean found = false;
      
      for (int i = 0; i < chars.length; i++) {
          if (current == chars[i] && !found) {
              found = true;
          }else if (current != chars[i]) {
              System.out.print(" " + current);
              size++;
              current = chars[i];
              found = false;
          }
      }
      
      System.out.print(" " + current);
      System.out.print("\n"+size);
      
      }
      }
      

      【讨论】:

      • 如果这是您要找的答案,请标记为正确答案
      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 2016-01-24
      • 2021-11-12
      • 2021-01-27
      • 1970-01-01
      • 2021-12-12
      • 2022-01-03
      • 2013-11-05
      相关资源
      最近更新 更多