[英]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.