Разделите запятые значения в Java, Int и String - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующее в текстовом файле для импорта в ArrayList:

Австралия, 2

Гана, 4

Китай, 3

Испания, 1

Мой ArrayList состоит из объектов другого класса, Team, у которого есть поля TeamName и rank. Я могу получить следующее, чтобы импортировать String и int в имя команды, но я не могу отделить число, которое должно быть рейтингом команд:

  public void fileReader()
  {
    try
    {
        String filename = "teams.txt";
        FileReader inputFile = new FileReader(filename);
        Scanner parser = new Scanner(inputFile);

        for (Team teams : teams)
        {                 
            teams.setTeamName(parser.next());
            teams.setRanking(parser.next()); //this doesn't work
        }
    }

    catch (IOException e)
    {
        System.out.println("Cannot find file");
    }

}

Я предполагаю, что мне нужно использовать разбиение где-нибудь вдоль строки или преобразовать строку в целое число ??

Ответы [ 4 ]

0 голосов
/ 05 мая 2018

Вы можете написать что-то вроде ниже, чтобы соответствовать вашей цели. В вашем сценарии использования есть два токена, то есть запятая (,) и новая строка (\ n). В результате next () не может использоваться прямым способом.

Я перебираю каждую строку, затем разбиваю каждую строку на запятую и, наконец, получаю последующие токены.

try
    {
        String filename = "teams.txt";
        FileReader inputFile = new FileReader(filename);
        Scanner parser = new Scanner(inputFile);

        for (Team teams : teams)
        {   
            String[] splitLine = sc.nextLine().split(","); // comma delimited array

            teams.setTeamName(splitLine[0]);
            teams.setRanking(splitLine[1]); 
        }
    }
0 голосов
/ 05 мая 2018

Проверьте opencsv. Сейчас 2018 год, и вам не нужно разбирать текстовый файл самостоятельно:).

0 голосов
/ 05 мая 2018

По умолчанию сканер будет использовать пробел в качестве разделителя

Переопределите это, вызвав метод useDelimiter в вашем случае parser.useDelimiter (',');

Затем для преобразования строки ранжирования в int parser.nextInt ()

0 голосов
/ 05 мая 2018

Scanner.next() прочитать следующий токен из входного потока и дать String.

Если вы хотите прочитать следующее целое число, вы должны использовать nextInt() вместо:

teams.setRanking(parser.nextInt());

Редактировать

Вы получили InputMismatchException, потому что по умолчанию Scanner использует пробел Java в качестве разделителя.

WHITESPACE_PATTERN = Pattern.compile("\\p{javaWhitespace}+")

В вашем случае в качестве разделителя используются запятая , и новая строка \n, поэтому необходимо настроить разделитель для вашего сканера:

Scanner parser = new Scanner(inputFile);
s.useDelimiter(",|\\n")

Еще одно обходное решение - прочитать всю строку и разобрать вашу строку:

String line = parse.nextLine();
String[] parts = line.split(",");
team.setTeamName(parts[0]);
team.setRanking(Integer.parse(parts[1]));

Вы можете выбрать одно из двух решений выше

...