Как разделить строки ввода в файле строковым значением и целочисленными ключами для таблиц Ha sh? - PullRequest
1 голос
/ 05 апреля 2020

Я хочу получить парсинг (если возможно) раздела, который содержит строку, которая является числом (то есть "95"), но я мог бы принять любую стратегию, чтобы сделать это. мой код работает для hashMaps

, чтобы не увеличивать его длину, вот как выглядят строки во входном файле:

Kostas_Antetokounmpo 37


public static void main (String[] args) throws IOException {
        String path = "roster.txt";
        String row;
        Integer row1;
        HashTable_NBA<Integer,String> roster = new HashTable_NBA<>();
        BufferedReader read = new BufferedReader(new FileReader(path));

        while ((row = read.readLine()) != null){

            String[] partition = row.split(" ", 2);
            if(partition.length >= 2){
                Integer key = Integer.parseInt(partition[1]);
                String value = partition[0];
                roster.put(key, value);

            }
        }

            System.out.println(roster);


    }
}

//EDIT
//the errors are these

Exception in thread "main" java.lang.NumberFormatException: For input string: "37   "
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at HashTable_NBA.main(HashTable_NBA.java:161)

1 Ответ

1 голос
/ 05 апреля 2020

Это предположение, но я предполагаю, что между значениями может быть несколько пробелов. И я удаляю 2 из команды split. Это вызывало проблемы.

        while ((row = read.readLine()) != null){

            String[] partition = row.split("\\s+");
            if(partition.length >= 2){
                Integer key = Integer.parseInt(partition[1]);
                String value = partition[0];
                roster.put(key, value);

            }
        }
...