Не удается получить значение из ключа (хэш-карты, текстовый файл)

Я начал кодировать недавно и застрял уже на несколько дней.
Поэтому мне нужно получить «значение» от «ключа», который находится в таблице, как:

    one uno
    two dos
    three tres
    four cuatro

N. B.: слова разделены табуляцией, поэтому с помощью » /t»

и то, что новичок я мог бы выполнить выглядит примерно так:

    import java.util.*;
    import java.io.*;
    public class test {
       public static void main(String[] args)throws FileNotFoundException, IOException {  
    Scanner scanner = new Scanner(new FileReader("C:UsersAdminworkspacetest_dictsrcsource.txt"));

        HashMap<String,String> map = new HashMap<String,String>();

        while (scanner.hasNextLine()) {
            String[] columns = scanner.nextLine().split("t");

            map.put(columns[0],(columns[1]));
//enter a key word
   System.out.println("Enter a word");
   String[] columns = scanner.nextLine();
//ignoring upper and lower case
          columns=columns.toLowerCase();
// returns the element associated with the key
           System.out.println(map.get(columns[])); 

    //close files
       scanner.close();
        }
       }
    }

Проблема в том, что я хочу иметь возможность ввести в консоли ключевое слово и получить связанное с ним значение. например:

Enter a word:
    one
    uno

Но я не могу использовать карту.get (столбцы[]);
и когда я пытаюсь map.get(columns[0]);по какой-то странной причине он показывает мне columns[1]так в консоли я получил

Enter a word:
uno
Enter a word:
dos
Enter a word:
tres
Enter a word:
cuatro

2 ответа

  1.      scanner.nextLine();
    

    выходные данные nextLine () — string not array of string, поэтому вам нужно сделать это так

        String consoleInput = scanner.nextLine();
        System.out.println(map.get(consoleInput.toLowerCase())); 
    
  2. Есть несколько проблем:

    • Вы попытались прочитать файл и входные данные в одной инструкции while -. Таким образом, ваш перевод не будет импортирован полностью, и вы пытаетесь уже искать в нем.
    • Тип не является безопасным, так как вы используете переменную scanner для чтения файла «и» консольный ввод.

    Вот пример, как я старался бы решить его более четко:

    import java.util.*;
    import java.io.*;
    
    public class Test {
        public static void main(String[] args)throws Exception {
    
            Scanner scanner = new Scanner(new FileReader("C:\Users\Admin\workspace\test_dict\src\source.txt"));
    
            HashMap<String,String> map = new HashMap<String,String>();
    
            while (scanner.hasNextLine()) {
                // you are loading a String Array from file to into "columns[]"
                String[] columns = scanner.nextLine().split("\t");
    
                // The array of the line is splittet in inserted in your map
                map.put(columns[0],(columns[1]));
    
                // That is all, you have to do the input in the outside of your reading while statement
    
                //close files
                scanner.close();
            }
    
            // Using input from console: http://stackoverflow.com/questions/4644415/java-how-to-get-input-from-system-console
            String input = null;
            while ((input = getConsoleInput("Enter a word: ")) != null) {
                // Use only the input for key-Search
                System.out.println(map.get(input));
            }
    
    
        }
    
        // Helper method for reading input
        public static String getConsoleInput(String message) throws  IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.print(message);
            String input = br.readLine();
            return input;
        }
    }