Подтвердить что ты не робот

Удалить повторяющиеся строки в массиве строк

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

"массив", который представляет собой строковый массив, содержит несколько строк, в которых две строки похожи друг на друга. Поэтому, используя приведенный ниже код, дублирующаяся строка должна быть удалена, но она не будет удалена.

Как удалить повторяющиеся строки?

Я использую следующий код.

    for(int s=0;s<array.length-1;s++)
    {
        for(int m=0;m<array.length;m++)
        {
                for(int n=0;n<array[m].length();n++)
                {   
                    if(array[s].charAt(n)==array[m].charAt(n))
                    {
                      continue;
                    }
                    else 
                break;
        } 
        if(n==array[m].length())
        {
            ArrayUtils.removeElement(array, array[s]);
        }
    }
4b9b3361

Ответ 1

Это будет работать

array = new HashSet<String>(Arrays.asList(array)).toArray(new String[0]);

или просто используйте HashSet вместо массива.

Ответ 2

Если это не [homework], я бы использовал Set

String[] array =
Set<String> uniqueWords = new HashSet<String>(Arrays.asList(array));

Ответ 3

Set<String> set = new HashSet<String>();
Collections.addAll(set, array);

или начните с

for(int s=0;s<array.length-1;s++)
{
    for(int m=s + 1;m<array.length;m++)
    {

                if(array[s] != null && array[s].equals(array[m]))
                {
                  // array = ArrayUtils.removeElement(array, array[s]); --m;??
                  array[m] = null; // Mark for deletion later on
                }
    } 
}

Ответ 4

  • Почему вы не используете String.equals() для сравнения, а не итерации через символы в строках вручную?
  • Ваша логика на самом деле ошибочна: для array[s] == "12345" и array[m] == "123" она будет утверждать, что они равны
  • Кроме того, в вашем внутреннем цикле for(int m=0;m<array.length;m++) m в какой-то момент станет равным s, поэтому вы сравните строку с самим собой

Эти примечания предполагают, что вам необходимо реализовать логику удаления с помощью собственного кода, а не разрешено использовать библиотеку классов. Если это не так, как отмечали другие, использование HashSet является самым простым подходом.

Ответ 5

Почему вы не удалили самый внутренний цикл в пользу String.equals(String)?

В первой итерации вы сравниваете массив [0] с массивом [0], которые равны, и он будет удален. Затем вы сравните исходный массив [1] со всеми остальными элементами в массиве, и если они равны, вы удалите массив [1] (а не другой).

Есть некоторые проблемы, если есть несколько повторяющихся строк, вы удаляете первый, что уменьшит размер массива без уменьшения r, поэтому некоторые из строк в массиве пропущены.

Я бы использовал структуру данных, которая создает уникальность, например Set.

Что произойдет, если в вашем массиве 3 одинаковых строки, я не уверен, что произойдет.

Я думаю, вы столкнулись с некоторыми ArrayIndexOutOfBoundsException s.

Ответ 6

Я думаю, что условие if в конце должно быть если (п == (массив [м].length() - 1))

Сказав это, вы, похоже, пытаетесь реализовать метод String.equals() в своем внутреннем большинстве циклов.

Ответ 7

     String[] arr = {"w10","w20","w10","w30","w20","w40","w50","w50"};
     List<String> arrList = new ArrayList<String>();
     int cnt= 0;
       //List<String> arrList = Arrays.asList(arr);
       List<String> lenList = new ArrayList<String>();
          for(int i=0;i<arr.length;i++){
        for(int j=i+1;j<arr.length;j++){
           if(arr[i].equals(arr[j])){
             cnt+=1;
           }                
        }
        if(cnt<1){
          arrList.add(arr[i]);
        }
          cnt=0;
        }

for(int k=0;k<arrList.size();k++){
            System.out.println("Array without Duplicates: "+arrList.get(k));
        }

Ответ 8

Дублировать целое удаление: это идеальный ответ /// Харис///

public static void duplicateRemove(int[] arr) {
    int temp = 0;

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length; j++) {
            if (arr[i] < arr[j]) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }

    int count;
    for (int j = 0; j < arr.length;) {
        count = 1;
        for (int i = j + 1; i < arr.length; i++) {
            if (arr[i] == arr[j]) {
                count++;
            } else
                break;

        }
        System.out.println(arr[j] + " is :  " + count);
        j += count;
    }

}