Ваш код в порядке. На самом деле все отлично. Проблема в том, где вы устанавливаете текст. Прямо здесь:
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
в конце - просто удалить последние бесполезные запятые.
Редактировать: С помощью во-вторых, отредактируйте то, что вы по сути пытаетесь сделать, это связать каждый элемент со свойством: количеством тегов. Вот почему мы будем использовать HashMap<String, Integer>
для этого. Это код (если вы ничего не понимаете, спросите меня):
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();
String[] in;
in = getInput.split(" ");
HashMap<String, Integer> tags = new HashMap<>();
for (String[] data1 : data) {
String[] container = data1[1].split(" ");
for (String s : in) {
for (String container1 : container) {
if (s.equals(container1)) {
//Here what we do is pass the number of tags. If it hasn't been detected it returns 0. And 0 + 1 = 1. So in the map you store that you have detected the item once and it continues etc.
tags.put(data1[0], tags.getOrDefault(data1[0], 0) + 1);
}
}
}
}
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Items | Number of tags\n");
for (String item : tags.keySet()) {
stringBuilder.append(item + " | " + tags.get(item) + " Tags Matched\n");
}
//System.out.println(stringBuilder.toString());
//or in your code:
result.setText(stringBuilder.toString());
По сути, мы помещаем элемент с количеством тегов. Каждый раз, когда мы находим элемент, мы увеличиваем количество тегов на единицу с добавлением.
Это то, что он производит, когда мы печатаем:
Items | Number of tags
Cat | 3 Tags Matched
Chicken | 1 Tags Matched
Ваш желаемый результат:)