【问题标题】:How to NOT find something in JAVA?如何在 JAVA 中找不到东西?
【发布时间】:2016-10-17 21:16:09
【问题描述】:

编辑: 好的,很抱歉这个问题不太清楚。让我们尝试其他方式: 我们有一个 ArayList 名称:Peter、John、Adam

我们正在寻找字符串名称; 如果 ArrayList 包含字符串,我们要写入字符串。如果 ArrayList 不包含 String,我们想将 String 添加到 ArrayList 中。

如果我正在寻找“Adam”,那么该程序无法运行,因为它首先找到名称“Peter”,然后是“John”,然后才找到“Adam”。所以前 2 次,它认为“Adam”不在列表中,并且这样做。

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

原始问题:

我有一个字符串和一个数组(ArrayList)。如果字符串在数组中,我必须做一些事情,如果它不在数组中,我必须做一些事情。我怎么做? 我不能这样做:

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

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

所以我是这样做的:

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

而且我有感觉,不应该这样。 ;)

我知道我可以使用布尔值代替这种方式,但在其他方式上也是一样的。难道没有完全不同的方法可以正确地做到这一点吗?

【问题讨论】:

  • 去掉break语句
  • equals(String) 而不是 ==
  • 你想为数组中的每一个匹配做“做点什么”吗?如果是这样,那么你不能break,因为 break 会终止循环。在循环结束之前你不能做“其他事情”,因为你永远不会知道字符串是否会在循环中出现。例如你基本上是在做“我在过去 30 秒内有没有在车上碾过什么东西?没有。好吧。我可能在接下来的 10 小时内也不会碾过其他任何东西”。
  • 你能用一个简洁明了的问题来表达吗?如果它同时包含在数组和列表中,你想做什么?
  • 所以您正在查看字符串数组列表,对吗?如果我有字符串“那里”,如果你正在搜索字符串“这里”,你应该做些什么吗?还是这两个字符串必须完全相同?

标签: java arrays string find


【解决方案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)

【讨论】:

    【解决方案2】:

    这个问题有点奇怪,但只要阅读你的第一句话,如果你想看看List e.g. 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");
    }
    

    输出:找到字符串。 (在本例中)。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          它有点模糊,所以我不确定这是否是你想要的,但如果你删除第一段代码中的中断,我想你会得到你想要的。您是否希望它为字符串的每次出现或仅第一次出现做某事。如果你确实需要休息,你可以在循环终止后检查 i 的值,所以

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

          【讨论】:

          • 如果你想使用 i 作为测试变量,你也需要在循环中中断
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-06
          • 1970-01-01
          相关资源
          最近更新 更多