#java #string #collections #frameworks
#java #строка #Коллекции #фреймворки
Вопрос:
У меня есть .txt:
- строка: x, Munich, c, e, f
- строка: y, Berlin, ad, uf
- строка: z, Hamburg, of, bf
Все слова разделяются символом ‘,’.
Первые 2 строки одной строки в этом текстовом тексте отправляются в конструктор. 3. и следующие строки переходят в список. Например, ключом является: a b в форме конструктора Значение представляет собой ArrayList с: c, e, f. Итак, 3 элемента.
String filePath = "....txt";
List<String> itemlist = new ArrayList<String>();
HashMap<Corporation, List> corp = new HashMap<Corporation, List>();
String line;
BufferedReader reader = new BufferedReader(new FileReader(filePath));
while ((line = reader.readLine()) != null) {
String[] parts = line.split(",", 3);
if (parts.length >= 3) {
String name = parts[0]; // key=name, value= address
String address = parts[1];
String info = parts[2];
itemlist = new ArrayList<String>(Arrays.asList(info.split(",")));
Corporation cor = new Corporation(name, address);
corp.put(cor, itemlist);
}
}
Что все работает нормально.
Теперь мне нужно выполнить поиск строки в одном из списков массива на карте.
Например, я ищу строку «bf», и она печатает, что она нашла строку и где с помощью правильного ключа карты. Например, с помощью «bf»: будет напечатано «bf найдено в «z, Гамбург»».
for (Entry<Corporation, List> entry : corp.entrySet()) {
if (entry.getValue().equals("bf")) {
System.out.println("Found at " );
System.out.println(entry.getKey());
} else {
System.out.println("String not found.");
}
}
Эта часть моего кода работает не так, как я хочу. Как мне сделать это правильно?
Комментарии:
1. Пожалуйста, определите вывод «не работает» / ожидаемый
Ответ №1:
if (entry.getValue().equals("bf"))
сравнивает a List
с a String
.
Попробуйте это if (entry.getValue().contains("bf"))
Комментарии:
1. с помощью System.out.println(corp.entrySet()); я получаю вывод:
2. [Корпорация [имя = x, адрес = Мюнхен] =[ c, e, f ], Корпорация [имя = y, адрес = Берлин]=[ ad, uf], Корпорация [имя = z, адрес = Гамбург]=[ of, bf]]
3. Я думаю, у вас есть пробел перед вашими записями в списке. Попробуйте
entry.getValue().contains(" bf")
и посмотрите, получите ли вы"Found at"
Ответ №2:
entry.getValue().equals("bf")
сравнивает список со строкой. Это никогда не может быть правдой.
Вы, скорее всего, хотите этого:
entry.getValue().contains("bf")