如何在JAVA中找不到东西?

时间:2016-10-17 21:16:10

标签: java arrays string find

编辑: 好的,抱歉没有那么明确的问题。让我们尝试其他方式: 我们有一个名字的ArayList:Peter,John,Adam

我们正在寻找String name; 如果ArrayList包含String,我们想要编写String。如果ArrayList不包含String,我们希望将String添加到ArrayList中。

如果我正在寻找" Adam",那么这个程序就不起作用,因为首先它找到名字" Peter",然后" John" ,之后才发现"亚当"。所以前两次,它认为,"亚当"不在列表中,并且这样做。

String findName;
for (i = 0; i < arrayList.size(); i++) {
  if (arrayList.get(i).getValue().contains(findName)) {
    System.out.println(findName);
    break;
  }
  else 
   arrayList.add(findString);
 }

原始问题:

我有一个String和一个Array(ArrayList)。我必须做一些事情,如果String在Array和其他东西中,如果它不在Array中。我怎么做? 我不能这样做:

String myString;
for (i = 0; i < arrayList.size(); i++) {
  if (arrayList.get(i).getValue().equals(myString)) {
    DO SOMETHING;
    break;
  }
  else
   DO SOMETHING ELSE;
 }

因为它只会找到一次String,而其它所有其他时间它都会起作用,就像arraylist不包含String一样。

所以我这样做:

String findString = "0";
String myString;
for (i = 0; i < arrayList.size(); i++) {
  if (arrayList.get(i).getValue().equals(myString)) {
    DO SOMETHING;
    findString = "2";  //when I find the String, I change this
    break;
  }
  if findString == "0";  //if I have not found the String, this happens
   DO SOMETHING ELSE;
 }

我有这种感觉,应该不这样做。 ;)

我知道我可以使用布尔而不是这种方式,但它以其他方式相同。难道没有完全不同的方法吗?

5 个答案:

答案 0 :(得分:1)

最干净的方法如下:声明一个返回字符串是否在数组中的方法:

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

然后在您的代码中使用此方法,如下所示:

String myString;    
String[] myArray;
if (arrContainsStr(myString, myArray)) {
    DO SOMETHING;
}else {
    DO SOMETHING ELSE;
}

这适用于原始字符串数组。请注意,如果您使用ArrayList或类似内容,则可以使用.contains(myString)方法检查列表是否包含字符串。这里的文档:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#contains(java.lang.Object)

答案 1 :(得分:1)

这个问题有点奇怪,但只是想读一下你的第一句话,如果你想知道List是否有问题。 ArrayList包含一个对象(例如String),您可以使用contains(Object o)方法而不是循环。我一定是想念你的观点。在任何情况下,一个例子:

String stringToFind = "Foo";
List<String> stringList = new ArrayList<>();
stringList.add("Foo");
if (stringList.contains(stringToFind)) {
    System.out.println("String found");
} else {
    System.out.println("String not found");
}

输出:找到字符串。 (在这个例子中)。

答案 2 :(得分:1)

你不能使用.contains来检查字符串是否在列表中吗?

if(arrayList.contains(myString)){
    // DO SOMETHING
} else {
    // DO SOMETHING ELSE
}

答案 3 :(得分:0)

如果您发现值然后中断,则可以将布尔值设置为true。 如果找不到该值,则布尔值将保持为false。 然后你做if

答案 4 :(得分:0)

它有点含糊,所以我不确定这是否是你想要的,但是如果你删除第一段代码中的中断,我想你会得到你想要的。你想要它为每次出现的字符串或只是第一次出现做SOMETHING。如果你确实需要中断,你可以在循环结束后检查i的值,所以

if(i==arrayList.size())
{
    //String found
}
else 
{
    //String not found
}