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

contacts 和 str 声明如下

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

元素仅通过主代码添加到“联系人”,开头为空。我尝试添加一个 toast 来显示通过意图接收到的“str”的值,它工作正常。但是我在 arrayHas 函数的“if”语句中得到了 NullPointerException。有人可以帮我吗?

4

7 回答 7

1

两个问题:

首先:添加一个空检查if

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

因为那个位置可能还没有分配一个有效的字符串,例如在 中very beginning,所以没有分配,arr[0]所以null比较将导致NullPointerException

第二:我想你想not ie. ! condition在这个检查中检查:

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

似乎您还没有用元素初始化数组。所以它们都是NULL。

在您的 arrayHas 函数中,检查您要比较的元素是否为空。

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

同样在调用 arrayHas 函数之前

if(arrayHas(contacts,str)) { }

检查联系人是否为空。

于 2012-11-09T06:50:34.633 回答
0

-我认为您正在尝试查找字符串是否存在于 Not 数组中。

-与 Array 相比,首次使用Collections更加灵活

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

例如,如果您正在使用 List

List<String> list = new ArrayList<String>();
list.contains("string_to_be_found");
于 2012-11-09T06:50:55.530 回答
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请始终以相反的方式进行检查 ie., str.equals(arr[i]),这样就NPE不会引发不必要的 s 。

在这种情况下,可以在 2 点处引发 NPE,如果arr为 null.length and .equals将抛出 NPE。由此可见,要么arr is null,要么arr[i] is null

找到arr填充数据的方法,有问题。

谢谢

于 2012-11-09T06:46:31.657 回答
0

如果您想避免重复,请使用 a java.util.Set<String>,它会为您处理。toArray()如果您以后真的需要一个数组,您可以随时使用。

如果您关心元素的顺序,您还可以使用 a java.util.List,并检查元素是否存在list.contains(str)

于 2012-11-09T06:42:47.563 回答
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 回答