簡體   English   中英

在檢查android中的字符串數組中是否存在字符串時是否為空指針異常?

[英]Null pointer exception while checking if a string is present in a string array in android?

我有一個應用程序,需要在添加它之前檢查String類型數組中是否存在String,以避免重復。 為此,我編寫了以下函數:

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

contacts和str聲明如下

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

元素僅通過主代碼添加到“聯系人”,它在開頭是空的。 我嘗試添加一個toast來顯示通過intent收到的'str'的值,它工作正常。 但是我在arrayHas函數的'if'語句中得到一個NullPointerException。 有人可以幫幫我嗎?

兩個問題:

首先if為:添加空檢查:

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

因為該位置可能尚未分配有效字符串,例如在very beginning ,沒有進行賦值且arr[0]null因此比較將導致NullPointerException

第二 :我想你想檢查not ie. ! condition not ie. ! condition 本檢查中的not ie. ! condition

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

似乎您尚未使用元素初始化數組。 所以它們都是NULL。

在您的arrayHas函數中,檢查您要比較的元素是否為null。

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

在調用arrayHas函數之前

if(arrayHas(contacts,str)) { }

檢查聯系人是否為空。

如果你想避免重復,使用java.util.Set<String> ,它將為你處理它。 如果以后真的需要一個數組,你總是可以使用toArray()

如果你關心元素的順序,你也可以使用java.util.List ,並用list.contains(str)檢查元素的存在。

請改用:

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

Arrays.asList(.).contains(.)為您提供了一種更好的方法來測試數組中是否存在字符串。

順便說一下,確保正確初始化contacts和str。

只是對代碼風格的建議。 嘗試防御性編程。 你正在檢查字符串str是否存在於arr中,在這種情況下總是進行反向檢查,即。, str.equals(arr[i]) ,這樣就不會產生不必要的NPE

在這種情況下,NPE可以在2個點上升,如果arr為null .length and .equals將拋出NPE。 從中可以看出, arr is null ,或者arr[i] is null

找到arr充滿數據的方法,出現問題。

謝謝

您不能初始化您的聯系人[],但可能是str [0] = null但str [1] =“something”;

在那種情況下改變

arr[i].equals(str) to `str.equals(arr[i])` as str is less likely to be null

-我想你正試圖找出一個String是否是Not of Array中的一個存在。

-首先使用Collections導致與Array相比更加靈活

-使用Collections.contains()方法查找字符串(如果存在)。

例如,如果您使用 List

List<String> list = new ArrayList<String>();
list.contains("string_to_be_found");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM