Удаление дубликатов из отсортированного массива Char

Я пытаюсь взять строку ниже, преобразовать ее в массив, отсортировать массив, а затем удалить все дубликаты. Я дошел до отсортированной части, но когда я запускаю это в надежде на удаление дубликатов, кажется, что вместо значения там печатается позиция.

Это также считает пробелы как длину, что дает мне длину 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);

}
}

person Jamie Rico    schedule 11.04.2015    source источник
comment
stackoverflow.com / questions / 29573018 /   -  person Jean-François Savard    schedule 11.04.2015
comment
Спасибо! У меня все еще есть одна ошибка, из-за которой мой вывод содержит ТОННУ пробелов. Есть ли способ это исправить?   -  person Jamie Rico    schedule 11.04.2015
comment
Что ж, это грязное исправление, но поскольку я понятия не имею, какая у вас программа, я считаю, что метод .trim() в экземпляре строки избавит от ненужных пробелов.   -  person Jean-François Savard    schedule 11.04.2015


Ответы (3)


current должен быть типа char, а не int. Чтобы избавиться от пробелов, вы можете напечатать, если current не является пробелом.

person Edward Doolittle    schedule 11.04.2015

Вместо использования массива вы можете использовать древовидный набор. Он будет иметь отсортированный порядок и не будет дубликатов. Но если в вашем сценарии вам нужен массив, в этом случае сначала ваша текущая переменная - это int вместо char, и вы не удаляете никаких дубликатов . вы просто печатаете это всякий раз, когда находите этот char, даже если этот элемент не имеет дубликатов, и это только для char [0]

person kushal bajaj    schedule 11.04.2015

Вы получаете не индекс числа, а его значение 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);

}
}
person AliAvci    schedule 11.04.2015
comment
Если это тот ответ, который вы искали, не могли бы вы отметить его как правильный ответ? - person AliAvci; 27.06.2017