Обработка токенов и строк Java

Я пишу программу, которая считывает данные из текстового файла с различной спортивной статистикой по баскетболу. Каждая строка (после двух строк заголовка) соответствует одной конкретной игре и счету каждой команды с некоторыми другими строками. Я пытаюсь использовать сканеры для считывания результатов int каждой игры, сохранения их в переменных, а затем сравнения их, чтобы определить, какая команда выиграла эту игру, чтобы я мог увеличивать количество побед позже в программе. Я понял, как последовательно читать все целые числа, но не могу понять, как читать два целых числа в строке, сохранять их как переменные, сравнивать их, а затем переходить к следующей строке/игре.

Вот соответствующий метод:

public static void numGamesHTWon(String fileName)throws FileNotFoundException{
    System.out.print("Number of games the home team won: ");
    File statsFile = new File(fileName);
    Scanner input1 = new Scanner(statsFile);
    String line = input1.nextLine();
    Scanner lineScan = new Scanner(line);
    input1.nextLine();
    input1.nextLine();

    while (input1.hasNext()) {
        if (input1.hasNextInt()) {
            int x = input1.nextInt();
            System.out.print(x);   
            input1.next();
        } else {
            input1.next();
        }
    }

Несколько строк из текстового файла:

Женский баскетбол NCAA

2011 - 2012

11.11.2007 Райс 63 @Winthrop 54 O1
11.11.2007 @S Dakota St 93 UC Riverside 90 O2
11.11.2007 @Texas 92 Missouri St 55
11.11.2007 Теннесси 76 Чаттануга 56
11.11.2007 Миссисипи 76 Столетие 57
11.11.2007 ETSU 75 Делавэр Ст 72 O1 Preseason NIT


person Hector    schedule 23.10.2015    source источник


Ответы (1)


читать файл построчно. затем разделите строку на String[]. поскольку вы знаете, где находятся оценки в каждой строке, вы можете легко проанализировать эти значения из массива и сравнить их. не могли бы вы поделиться несколькими строками из вашего ввода? тогда я могу показать вам точный код

вы можете попробовать что-то вроде

String[] parts = str.split("\\D+");

где str — строка, которую вы только что прочитали. теперь массив частей будет содержать все числа в вашей строке. просто прочитайте массив, проанализируйте его до int и сделайте сравнение. обратите внимание, что первые три записи в этом массиве будут соответствовать дате, поэтому просто игнорируйте их.

Например

String[] parts = "2007-11-11 Mississippi St 76 Centenary 57".split("\\D+");

for (String g: parts)

        System.out.println(g);

распечатывает

2007
11
11
76
57

так что теперь вы можете просто взять последние два значения и сравнить

 while (input1.hasNextLine()) {
            String line = input1.nextLine();

             String[] parts = line .split("\\D+");

             int score1 = Integer.parseInt(parts[parts.length-2]);

             int score2 = Integer.parseInt(parts[parts.length-1]);

             /*now compare score1 and score2 and do whatever...*/
        }
person AbtPst    schedule 23.10.2015
comment
Я не должен использовать массивы или синтаксический анализ, просто использую сканеры для чтения файла, строк и токенов. - person Hector; 23.10.2015
comment
помимо даты, вы уверены, что можете получить только два целых числа в строке? - person AbtPst; 23.10.2015
comment
Дата не считается целым числом, две оценки считаются, а появляющиеся O2 и O1 не читаются как целые числа, потому что они начинаются с O, поэтому, как я это сделал, он просто распечатывает все оценки в последовательность. В строке должно быть только два балла. - person Hector; 23.10.2015
comment
пожалуйста, смотрите последнее редактирование. попробуйте запустить код и посмотрите, работает ли это - person AbtPst; 23.10.2015