我有一个有项目列表的程序。
然后我搜索一个字符串,并尝试在所述列表中找到它。
我希望发生的是:它找到第一个匹配项,然后将其打印出来或保存在某个地方,以便我以后可以使用它(例如,通过突出显示用户选择)。然后,一旦我再次搜索相同的字符串,它应该返回第二次出现,然后是第三次,依此类推。当它没有找到更多的出现时,它应该回到开始处并重复它。
这是我所拥有的一个简单的例子:
public static void main(String[] args) {
ArrayList<String> exampleList = new ArrayList<String>();
exampleList.add("string1");
exampleList.add("john");
exampleList.add("string2");
exampleList.add("arnold");
exampleList.add("string3");
String inputExample = "str"
for (String s : exampleList) {
if (s.contains(inputExample)) {
System.out.println(s);
break;
}
}
}我在if中添加了break,所以我只能得到第一个结果。如果我删除它,我会得到所有的结果。
在程序中,我有与点击按钮相关的类似代码,如果列表包含用户搜索的内容,则突出显示用户选择,这只是一个示例。
在我的程序中,只有第一个结果会突出显示(因为我跳出了循环),或者只有最后一个结果会突出显示(因为我没有跳出循环)。
我如何才能让搜索从它停止的地方继续,正式地忽略它已经获得的结果呢?
发布于 2020-03-28 02:06:34
正如@Alex在他的回答中指出的那样,你应该使用iterator,并将你的结果保存在一个私有的ArrayList中,以便进一步使用这些搜索结果。
如果您不熟悉iterator,请使用this
我已经编写了一个简单的类HighlightingUserInput,它的行为与您的条件相同。它会给出第一个搜索结果,并打印出来并保存在ArrayList中,如果你没有退出程序(或者你可以添加一个搜索按钮,如果用户再次按下搜索按钮),然后给出第二个搜索结果,依此类推。
请随时询问与以下程序相关的任何问题。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class HighlightingUserInput{
private static ArrayList<String> resultsString=new ArrayList<>();
public static void main(String [] args) {
ArrayList<String > allStrings=new ArrayList<>();
allStrings.add("string1");
allStrings.add("john");
allStrings.add("string2");
allStrings.add("arnold");
allStrings.add("string3");
Scanner scanner=new Scanner(System.in);
CharSequence userIput=scanner.nextLine();
Iterator iterator = allStrings.iterator();
while(!scanner.nextLine().equals("exit")) {
inner:
while (iterator.hasNext()) {
String s = (String) iterator.next();
if (s.contains(userIput)) {
System.out.println(s);
HighlightingUserInput.resultsString.add(s);
break inner;
}
}
if(!iterator.hasNext())
iterator = allStrings.iterator();
}
}
}发布于 2020-03-28 00:52:21
您可以遍历列表,每次找到字符串时,都可以调用您的方法来突出显示它。或者,如果你想在每次调用你的方法时都能得到1到1的字符串,那么你可以使用迭代器。在第一次调用您的方法时,您将获得列表的迭代器,并将其存储在类的私有字段中。在后续调用中,您可以使用此迭代器从列表中获取下一个匹配的字符串。
发布于 2020-03-28 01:07:28
public static void main(String[] args) {
ArrayList<String> exampleList = new ArrayList<String>();
exampleList.add("string1");
exampleList.add("john");
exampleList.add("string2");
exampleList.add("arnold");
exampleList.add("string3");
String inputExample = "str";
int count = 0;
while(count >= 0){
System.out.println(customSearch(exampleList, inputExample, count);
count ++;
} // write break statement when count reaches to a particular value based on your use case
String customSearch(List<String> words, String searchKey, int count){
List<String> searchedWords = words.stream().filter(word -> if word.toLowerCase().contains(searchKey.toLowerCase)).collect(Collectors.toList());
return searchWords.get(count%searchedWords.size());https://stackoverflow.com/questions/60890328
复制相似问题