0

重複を避けるために、文字列を追加する前に、文字列が文字列型の配列に存在するかどうかを確認する必要があるアプリケーションがあります。これを行うために、私は次の関数を作成しました。

public boolean arrayHas(String[] arr, String str)
{
    for(int i=0;i<arr.length;i++)
    {
        if(arr[i].equals(str))
            return true;
    }
    return false;
}

この関数を呼び出すために、私は使用しています:

if(!arrayHas(contacts,str))
{
    contacts[i] = str;
    i++;
}

連絡先とstrは次のように宣言されます

public static  String contacts[] = new String[]{};
String str = "";
Bundle bun = getIntent().getExtras();
str = bun.getString("key");

要素はメインコードを介してのみ「連絡先」に追加され、最初は空です。トーストを追加して、インテントを通じて受け取った「str」の値を表示しようとしましたが、正常に機能します。しかし、arrayHas関数の「if」ステートメントでNullPointerExceptionが発生しています。誰かが私を助けてくれますか?

4

7 に答える 7

1

配列を要素で初期化していないようです。したがって、それらはすべてNULLです。

arrayHas関数で、比較している要素がnullであるかどうかを確認します。

if(arr[i] != null && arr[i].equals(str) )
{
    // do your operation
}

また、arrayHas関数を呼び出す前に

if(arrayHas(contacts,str)) { }

連絡先がnullかどうかを確認します。

于 2012-11-09T06:50:34.633 に答える
1

2つの問題:

最初に:nullチェックインを次のように追加しますif

      if(arr[i] != null && arr[i].equals(str))

その位置にはまだ有効な文字列が割り当てられていない可能性があるため、たとえば、ではvery beginning、割り当ては行われず、比較すると。になります。arr[0]nullNullPointerException

2番目not ie. ! condition:このチェックでチェックしたいと思います:

   if(!arrayHas(contacts,str))
   {
     contacts[i] = str;
     i++;
   }
于 2012-11-09T06:45:07.497 に答える
0

-文字列がNotの配列に存在するかどうかを調べようとしていると思います。

-アレイと比較してはるかに柔軟な最初の使用Collections原因。

-存在しない場合Collections.contains()は、メソッドを使用して文字列を検索します。

たとえば、以下を使用している場合 List

List<String> list = new ArrayList<String>();
list.contains("string_to_be_found");
于 2012-11-09T06:50:55.530 に答える
0

重複を避けたい場合は、を使用しjava.util.Set<String>てください。それが自動的に処理されます。toArray()後で本当に配列が必要な場合は、いつでもusoを使用できます。

要素の順序が気になる場合は、を使用してjava.util.List、要素の存在を次のように確認することもできます。list.contains(str)

于 2012-11-09T06:42:47.563 に答える
0

代わりにこれを使用してください:

String contacts[] = new String[10];
String str = "somethiung";
if(Arrays.asList(contacts).contains(str))
{
    contacts[i] = str;
    i++;
}

Arrays.asList(.).contains(.)文字列が配列に存在するかどうかをテストするためのはるかに優れた方法を提供します。

ちなみに、contactsとstrが正しく初期化されていることを確認してください。

于 2012-11-09T06:46:20.207 に答える
0

コードスタイルへの単なる提案。防御的なプログラミングを試みてください。文字列strが存在するかどうかをチェックarrしている場合、その場合は常に逆にチェックを実行します。つまり、str.equals(arr[i])不要なNPEsが発生しないようにします。

この場合、NPEは2ポイントで発生する可能性があり、arrnullの場合は.length and .equalsNPEがスローされます。arr is nullこのことから、、、またはのいずれかであることが明らかですarr[i] is null

データで埋め尽くされているメソッドを見つけarrてください。何か問題が発生しています。

ありがとう

于 2012-11-09T06:46:31.657 に答える
0

連絡先[]を初期化してはいけませんが、str [0]=nullのようにstr[1]="something";の場合があります。

その場合は変更

arr[i].equals(str) to `str.equals(arr[i])` as str is less likely to be null
于 2012-11-09T06:47:47.190 に答える