删除字符串数组重复的字符串(Delete duplicate strings in string a

2019-06-24 01:28发布

我想提出的基于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]);
        }
    }

Answer 1:

这将工作

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

或只使用一个HashSet代替的阵列组成。



Answer 2:

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
                }
    } 
}


Answer 3:

除非这是[homework]我会用一个集

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


Answer 4:

建议的解决方案不保留元素的顺序。 如果您使用Java 8或更高,并希望维持秩序,你可以使用流,如下所示:

array = Arrays.stream(array).distinct().toArray(String[]::new);

完整的示例: https://www.javacodeexamples.com/java-string-array-remove-duplicates-example/849



Answer 5:

import java.util.*;
public class Stringarray {

    public static void main(String args[]){

        String[] name = {"aim","rajesh","raju","aim"};

    Set<String> myset  = new HashSet<String>();
    Collections.addAll(myset,name);

       System.out.println(myset);
    }
}


Answer 6:

  • 你为什么不使用String.equals()进行比较,而不是通过手动字符串中的字符进行迭代?
  • 您的逻辑实际上是有缺陷的:对于array[s] == "12345"array[m] == "123" ,将权利要求它们是相等的
  • 此外,在内部循环for(int m=0;m<array.length;m++) m也将成为等于s在某些时候,所以你将一个字符串比较自身

这些说明假设您需要使用自己的代码,而不是被允许使用类库来实现去除逻辑。 如果不是这种情况下,其他人指出,使用HashSet是最简单的方法。



Answer 7:

你为什么不支持删除最内环与String.equals(String)

在第一次迭代您比较阵列[0]与阵列[0],它是相等的,并且它会被移除。 然后,你将比较原始阵列[1]在阵列的所有其它元件,并且如果他们相等,要卸下阵列[1](不是另一个)。

有一些问题,如果有一些重复的字符串,要删除的第一个,这将减少数组的大小而不降低r所以,某些字符串数组中的被跳过。

我会用一个数据结构,这迫使独特性,如集。

如果你有你的阵列3个相等的字符串会发生什么,我不知道会发生什么。

我相信你会遇到一些ArrayIndexOutOfBoundsException秒。



Answer 8:

我认为在结束时,如果条件应该是如果(N ==(阵列[米]。长度() - 1))

说了这么多,你似乎在试图实现什么String.equals()方法在你内心最环路。



Answer 9:

     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));
        }


Answer 10:

重复删除整数:这是一个完美的答案///哈里斯///

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;
    }

}


文章来源: Delete duplicate strings in string array