我想制作一个程序,可以根据标签搜索项目。我使用2D数组放置项目及其对应的标签。
----------------------------
Item1 | Tags
Cat | Pet Cute Mammal
Burger | Food Snack Mammal
Chicken | Animal Food Pet
----------------------------
下面是我到目前为止的代码:我的问题是,当我基于标签进行搜索时,即使我输入的标签也与其他项目相关,它也只会输出一项。我的目标是输出所有标签等于我输入标签的项目。
String [][] data={{"Cat","Pet Mammal Cute"},
{"Burger","Food Snack Hot"},
{"Chicken","Food Bird Pet"},
{"Ice Cream","Food Dessert Cold"},
{"Laptop","Gadget Device Computer"},
};
String getInput= searchInput.getText();
for (String[] data1 : data) {
String [] container= data1[1].split(" ");
for(int i=0;i<container.length ;i++)
if (getInput.equals(container[i])) {
result.setText(data1[i]);
}
}
您的代码很好。实际上,它所做的一切都很棒。问题是您在哪里设置文本。就在这里:
result.setText(data1[i]);
首先,如果您使用的是i
,则会获得数组超出范围的异常。所以它需要像这样:
result.setText(data1[0]);
第二,您一次又一次地设置文本,这意味着您要删除先前的文本。因此,您只会看到最后一场比赛。为了解决这个问题,我将使用StringBuilder
将匹配项附加在一起,然后在搜索后设置文本。因此,您的代码变为:
String [][] data={{"Cat","Pet Mammal Cute"},
{"Burger","Food Snack Hot"},
{"Chicken","Food Bird Pet"},
{"Ice Cream","Food Dessert Cold"},
{"Laptop","Gadget Device Computer"},
};
String getInput= searchInput.getText();;
StringBuilder resultString = new StringBuilder();
for (String[] data1 : data) {
String [] container = data1[1].split(" ");
for (String keyword : container)
if (getInput.equals(keyword)) {
resultString.append(data1[0]);
resultString.append(", ");
}
}
result.setText(resultString.toString().substring(0, resultString.length() - 2));
通过resultString.length() - 2
结尾只是删除最后一个无用的逗号。