Как пропустить токен в java, класс сканера - PullRequest
1 голос
/ 05 мая 2020

Я искал в Stack Overflow понятное решение моей проблемы, но не нашел. Этот метод должен взять текстовый файл и поместить информацию в массив объектов.

Текстовый файл отформатирован следующим образом:

1 # Mr Jhon Doe # Taxi # 34.7 3 # Миссис Джексон Тэмми # Телефон # 20.5

Общий формат:

GuestNumber # GuestName # Reason # Cost (int String String double)

Метод помещает информацию в массив объектов arrItems класса ExtraItems, который отслеживает дополнительные расходы, купленные гостем, идентифицированным по номеру гостя.

Переменными класса для класса «Гость» являются «Номер гостя», «Причина», «Стоимость». Я не могу найти способ пропустить имя гостя при создании экземпляров класса, и я продолжаю получать ошибки. Я попробовал метод .skip () и получил исключение NoSuchElementException, и я попытался удалить имя гостя и создать новый экземпляр Scanner для строки из текстового файла, и я получил InputMismatchExpression. Я прикрепил свой код ниже, который не учитывает дополнительный токен.

public TestExtraItem(String textFile)
{
    try
    {
        Scanner inputStream = new Scanner(new FileInputStream(textFile));
        while (inputStream.hasNextLine() && counter < 100)
        {

            String line = inputStream.nextLine();
            Scanner lineReader = new Scanner(line).useDelimiter("#");
            arrItems[counter] = new ExtraItem(lineReader.nextInt(), lineReader.next(), lineReader.nextDouble());
            lineReader.close();
            counter++;

        }
        inputStream.close();
    } catch (Exception e)
    {
        System.out.println(e.toString());
    }
}

и моя попытка его решения

public TestExtraItem(String textFile)
{
    try
    {
        Scanner inputStream = new Scanner(new FileInputStream(textFile));
        while (inputStream.hasNextLine() && counter < 100)
        {

            String line = inputStream.nextLine();
            Scanner lineReader = new Scanner(line).skip("Mr").useDelimiter("#");
            arrItems[counter] = new ExtraItem(lineReader.nextInt(), lineReader.next(), lineReader.nextDouble());
            lineReader.close();
            counter++;

        }
        inputStream.close();
    } catch (Exception e)
    {
        System.out.println(e.toString());
    }
}

У меня были другие попытки, но это была та, которую я мысль должна работать.

Конструктор для класса ExtraItems -

public ExtraItem(int inGuestNum, String inItemType, double inCost)
{
    guestNum = inGuestNum;
    itemType = inItemType;
    cost = inCost;
}

Могу я получить помощь? Я прикрепил полный текстовый файл ниже

1 # Mr G Ferreira # Phone # 7.05

2 # Mrs L Honeywell # Drinks # 71.95

3 # Ms I Mendes # Kitchen # 39.95

1 # Mr G Ferreira # Kitchen # 23.95

1 # Mr G Ferreira # Drinks # 7.15

4 # Mr B Khoza # Taxi # 127.25

5 # г-жа И. Фрейлих # Служба безопасности # 31.95

5 # г-жа И. Фрейлих # Интернет # 7.95

6 # г-н Дж. Ковальски # телефон # 18.30

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