Как анализировать строки кода с несколькими типами данных - PullRequest
1 голос
/ 13 октября 2019

В настоящее время работает над программой, которая читает статистику от футболистов, конвертирует данные в двоичный файл и записывает все это в файл. Проблема, с которой я столкнулся, заключается в разборе всех различных типов данных, содержащихся в файле, который я читаю. Файл, в котором я читаю, будет иметь следующий формат - lastName yearsExp позиция рост вес 40ydSpeed ​​команда активна? Примером того, как это будет выглядеть, является следующий файл: Брэди, 14, QB, 1, 210, 4.9, Патриоты, правда Мне интересно, как выполнить синтаксический анализ различных типов данных, int, char, double, Stringи логическое значение.

Пока моя программа просит пользователя ввести файл, и она перехватывает любые исключения FileNotFoundException из недопустимых файлов и зацикливается до тех пор, пока не будет введен правильный файл. Затем программа читает файл и сохраняет его в виде списка.

public static void main(String[] args) throws IOException {
     File file;
     Scanner inputFile;
     Scanner readFile;
     String line;
     String fileName;
     int x = 1;

     ArrayList<String> stats = new ArrayList<String>();

    do {
        Scanner kb = new Scanner(System.in);
        System.out.println("Please enter the name of a " +
                "file containing football player data:");
        fileName = kb.nextLine();

        try {
            file = new File(fileName);
            inputFile = new Scanner(file);
            while(inputFile.hasNext()) {

                    stats.add(inputFile.nextLine());
            }
            x=2;

        }
        catch (FileNotFoundException e)
            {
            System.out.print("File not found. ");
            }
       }
    while(x==1);

    for (String s : stats) {
        System.out.println(s);
    }

    // TODO use the following methods for writing to binary
    // TODO writeUTF, writeInt, writeChar, writeInt, writeInt, writeDbl, writeByte

Ответы [ 3 ]

2 голосов
/ 13 октября 2019

как выполнить синтаксический анализ различных типов данных: int, char, double, String и boolean

По порядку:

int x = Integer.parseInt(s)
char x = s.charAt(0)
double x = Double.parseDouble(s)
String x = s
boolean x = Boolean.parseBoolean(s)
0 голосов
/ 13 октября 2019

Вы можете разделить входные данные на , или любой другой общий разделитель, разделяющий их, а затем попытаться проанализировать каждый из них по одному.

String input = "Tom, 15, 6, 86.4"; // name, age, grade, mark
String[] inputs = input.split(", "); // [ Tom, 15, 6, 86.4 ]

for (String in : inputs) {
    if (isInteger(in)) {
        // something
    } else if (isString(in)) {
        // other thing
    } // etc
}
0 голосов
/ 13 октября 2019

В настоящее время проблема заключается в том, что ArrayList<String> stats = new ArrayList<String>(); заставляет любое из прочитанных вами значений быть String. Если вы узнали о классах, то вы можете создать класс, который моделирует футболиста: в качестве примера назовем его FootballPlayer.

В FootballPlayer у вас будет много полей разных типов. У вас будет один для lastName, то есть String, yearsExp, то есть int и т. Д.

Тогда, здесь:

 while(inputFile.hasNext()) {
     stats.add(inputFile.nextLine());
 }

Вы можете оставитьИндекс, соответствующий тому, что поле вы пытаетесь прочитать. lastName может соответствовать index 0, yearsExpr - 1 и т. Д. Затем, основываясь на значении индекса (вы можете использовать оператор switch), вы можете вызвать другой метод Scanner, который возвращаетсоответствующий тип, например nextInt(), если индекс 1 (для yearsExpr). После вызова этого подходящего метода вы должны присвоить возвращенное значение соответствующему полю в вашем экземпляре FootballPlayer.

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

...