【发布时间】: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 小时内也不会碾过其他任何东西”。 -
你能用一个简洁明了的问题来表达吗?如果它同时包含在数组和列表中,你想做什么?
-
所以您正在查看字符串数组列表,对吗?如果我有字符串“那里”,如果你正在搜索字符串“这里”,你应该做些什么吗?还是这两个字符串必须完全相同?