Есть ли способ разделить сканер файлов пробелами, но оставить имя и фамилию разделенными пробелом в виде одной строки? - PullRequest
0 голосов
/ 02 декабря 2019

Я пытаюсь заставить Сканер читать строки файла и разделять значения пробелами, но также сохранять имя и фамилию вместе как одну строку.

Вот пример:

Учитывая это как простой текстовый файл:

Rachael Adams 3.36 1.93
Foluke Akinradewo 4.81 1.14
Kayla Banwarth 2.98 0.5
Michelle Bartsch 0.28 1.42
Krista Vansant 2.78 0.86
Courtney Thompson 0.59 0.93
Kelly Murphy 1.15 0.58
Lauren Gibbemeyer 2.25 0.5
Alexis Crimes 3.89 1.34
Tori Dixon 0.92 1.62
Nicole Fawcett 4.01 0.61
Alisha Glass 1.96 1.55
Natalie Hagglund 2.49 0.52
Kim Hill 1.53 1.76
Cursty Jackson 0.69 1.44

Мне нужно иметь возможность сортировать каждое поле по отдельности, например:

String s = "Kim Hill";
double d1 = 1.53;
double d2 = 1.76;

Чтобы я мог передать их в свой конструктор для каждого объекта Person.
Вот что я попробовал:

    Roster(String fileName) throws FileNotFoundException {
    File rosterFile = new File(fileName);
    Scanner fileScanner = new Scanner(rosterFile);

    while (fileScanner.hasNextLine()) {
        String lineString = fileScanner.nextLine();
        String name = lineString.substring(0, lineString.length() - 10);
        Double attack = Double.valueOf(lineString.substring(lineString.length() - 9, lineString.length() - 5));
        Double defense = Double.valueOf(lineString.substring(lineString.length() - 5));
        peopleArrayList.add(new Person(name, attack, defense));
    }
    sizeOfRoster = peopleArrayList.size();
    fileScanner.close();
}

Проблема, с которой я столкнулся, заключается в том, что некоторые строкисодержат 0,5 в данных оценки вместо 0,50, поэтому мой lineString.length здесь не применим. В моих тренировочных данных была дополнительная цифра, поэтому теперь я должен выяснить, как это сделать по-другому.

1 Ответ

0 голосов
/ 02 декабря 2019

Попробуйте это:

public static void main (String[] args) {
        String name = null;
        double attack = 0, defense = 0;
        try {
            Scanner s = new Scanner(new File("file.txt"));
            while(s.hasNext()) {
                name = s.next() + " "+ s.next();
                attack = s.nextDouble();
                defense = s.nextDouble(); 

                peopleArrayList.add(new Person(name, attack, defense));

                System.out.println();
                System.out.println(name);
                System.out.println(attack);
                System.out.println(defense);
            }
            s.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

вывод:

Rachael Adams
3.36
1.93

Foluke Akinradewo
4.81
1.14

Kayla Banwarth
2.98
0.5

Michelle Bartsch
0.28
1.42

Krista Vansant
2.78
0.86

Courtney Thompson
0.59
0.93

Kelly Murphy
1.15
0.58

Lauren Gibbemeyer
2.25
0.5

Alexis Crimes
3.89
1.34

Tori Dixon
0.92
1.62

Nicole Fawcett
4.01
0.61

Alisha Glass
1.96
1.55

Natalie Hagglund
2.49
0.52

Kim Hill
1.53
1.76

Cursty Jackson
0.69
1.44
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...