21

文字列配列から重複する文字列を削除する必要があるJavaでの文字列処理に基づいたプログラムを作成しています。このプログラムでは、すべての文字列のサイズが同じです。

文字列配列である「配列」には、2つの文字列が互いに類似している多数の文字列が含まれています。したがって、以下のコードを使用すると、重複する文字列を削除する必要がありますが、削除されません。

重複する文字列を削除するにはどうすればよいですか?

私は次のコードを使用しています。

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

15 に答える 15

40

これはうまくいくでしょう

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

またはHashSet、配列の代わりに使用します。

于 2012-04-28T19:42:13.357 に答える
5

提案された解決策は、要素の順序を維持しません。Java 8以降を使用していて、順序を維持したい場合は、次のようにストリームを使用できます。

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

完全な例:https ://www.javacodeexamples.com/java-string-array-remove-duplicates-example/849

于 2018-05-15T12:11:40.793 に答える
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
                }
    } 
}
于 2012-04-28T19:42:29.313 に答える
1

これがない限り、[homework]私はセットを使用します

String[] array =
Set<String> uniqueWords = new HashSet<String>(Arrays.asList(array));
于 2012-04-28T19:42:54.430 に答える
1
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);
    }
}
于 2018-08-21T07:21:00.527 に答える
0
  • String.equals()文字列内の文字を手動で繰り返す代わりに、比較に使用してみませんか?
  • あなたの論理は実際に欠陥があります:array[s]=="12345"array[m]==の"123"場合、それらは等しいと主張します
  • さらに、内側のループもある時点でfor(int m=0;m<array.length;m++) m等しくなるので、文字列をそれ自体と比較しますs

これらの注意事項は、クラスライブラリの使用を許可せずに、独自のコードを使用して削除ロジックを実装する必要があることを前提としています。そうでない場合は、他の人が指摘しているように、aを使用するのHashSetが最も簡単なアプローチです。

于 2012-04-28T19:43:21.330 に答える
0

なぜあなたは最も内側のループを削除しなかったのString.equals(String)ですか?

最初の反復では、array[0]と等しいarray[0]を比較しているので、削除されます。次に、元の配列[1]を配列内の他のすべての要素と比較し、それらが等しい場合は、配列[1]を削除します(他の要素ではありません)。

いくつかの問題があります。重複する文字列がある場合は、最初の文字列を削除します。これにより、配列のサイズが縮小されずに縮小さrれ、配列内の一部の文字列がスキップされます。

Setなどの一意性を強制するデータ構造を使用します。

配列に3つの等しい文字列がある場合はどうなりますか、どうなるかわかりません。

私はあなたがいくつかに遭遇すると信じていますArrayIndexOutOfBoundsException

于 2012-04-28T19:47:18.330 に答える
0

最後のif条件はif(n ==(array [m] .length()-1))だと思います

そうは言っても、あなたはString.equals()メソッドが最も内側のループで行うことを実装しようとしているようです。

于 2012-04-28T19:53:11.593 に答える
0
     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));
        }
于 2013-10-25T10:34:16.587 に答える
0
List<String> al = new ArrayList<String>();
String[] months={"Jan","Feb","Mar","Apr","Jan","Mar","May","May"};
for(int i=0;i<months.length;i++){
    for(int j=1;j<months.length;j++){
        if(months[i].equalsIgnoreCase(months[j])){
            if(!al.contains(months[i])){
                al.add(months[i]);
            }
        }
    }
}
于 2019-08-06T09:42:42.197 に答える
0
Sring[] myStringArray = {"hello", "hello", "moto"};
String[] filteredArray = new LinkedHashSet<String>(Arrays.asList(myStringArray))
                         .toArray(new String[0]);

System.out.println("filteredArray Size: " + filteredArray.length);
System.out.println("filteredArray[0] = " + filteredArray[0]);
System.out.println("filteredArray[1] = " + filteredArray[1]);
于 2020-07-28T15:40:49.603 に答える
0

データ構造を設定すると、のジョブが自動的に実行されます。HashSet要素の順序を気にする場合は、最も可能性の高いオプションは次のようになります。TreeSet

List<String> input = Arrays.asList(array);
Set<String> unique = new HashSet<>(input);
于 2020-07-28T16:24:48.490 に答える
0
public static List<String> sortHandleArrayList(String... arrayInput) {
    List<String> list = new ArrayList<>();
    for (String string : arrayInput) {
        if (!list.contains(string)) {
            list.add(string);
        }
    }
    Collections.sort(list);
    return list;
}
于 2021-05-20T05:47:55.290 に答える
0

コレクションを使用せずにString[]から重複する文字列を削除するには

    public static void removeDuplicate(String[] str, int size){
            for(int i=0; i<size-1; i++){
                if(str[i]!=null){
                    for(int j=i+1; j<size-1; j++){
                        if(str[i].equals(str[j])){
                            str[j]=null;
                        }
                    }
                }
            }
            for(int i=0; i<size;i++){
                if(str[i]==null)
                   continue;
                System.out.println(str[i]);
            }
        }
于 2021-05-30T08:19:39.773 に答える
-2

重複する整数の削除:これは完璧な答えです///ハリス///

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

}
于 2013-10-09T06:56:24.087 に答える