java две эквивалентные строки выводят разный результат
Суть программы: из текстового файла извлечь слова и поместить в хеш таблицу. Затем пользователь вводит какое нибудь слово и программа проверяет наличие или отсутствие. Возникла интересная проблема: Если я заношу слово в переменную при записи в хеш таблицу (s=word) то программа выводит правильный результат, а если строку с клавиатуры написать, или задать явно (hashMap.containsValue("что")) то программа не работает. Почему? Ведь все три строки эквивалентны, везде слово "Что".
public static void main(String[] args) throws IOException {
HashMapImpl<Integer, String> hashMap = new HashMapImpl<>();
Scanner in = new Scanner(System.in, "windows-1251");
System.out.print("Введите слово для проверки: ");
String num = in.nextLine();
System.out.print(num);
File f = new File("text1.txt");
final int length = (int) f.length();
String s="";
if (length != 0) {
char[] cbuf = new char[length];
InputStreamReader isr = new InputStreamReader(new FileInputStream(f),"windows-1251");
final int read = isr.read(cbuf);
String EXAMPLE_TEST = new String(cbuf, 0, read);
// System.out.println(EXAMPLE_TEST);
isr.close();
Pattern pattern =
Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS
| Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(EXAMPLE_TEST);
SortedSet<String> words = new TreeSet<>();
while (matcher.find())
words.add(matcher.group().toLowerCase());
for (String word : words)
System.out.println("word = " + word);
int n=0;
for (String word : words)
{hashMap.put(n, word);
n++;
s=word;}
System.out.println(s);
System.out.println(num);
}
System.out.println(s.equals(num));
System.out.println("Hashmap has value at null:"+hashMap.containsValue(s));
System.out.println("Hashmap has value at null:"+hashMap.containsValue(num));
System.out.println("Hashmap has value at null:"+hashMap.containsValue("что"));
}
Ответы (1 шт):
Вы посмотрели, что у вас выводит System.out.print(num)?
У меня, к примеру, в этом месте распечатывается что. Разумеется, такой строки в вашем хэш-мапе нет.
Причина в том, что у меня консоль eclipse настроена принимать вход в кодировке utf-8. Если вы поменяете кодировку для сканера входного потока Scanner in = new Scanner(System.in, "utf-8");, то всё заработает. У меня заработало.
