Сканирование файла с помощью String и Int Java

Так что у меня есть файл.dat, который является списком. Каждая строка начинается с буквы в качестве команды для моей программы будильника, а за некоторыми следуют цифры в формате времени (XX:XX). Мне нужно отсканировать букву arr[0], чтобы программа знала, какой метод реализовать, а затем отделить целые числа от двоеточия, чтобы получить arr[1] и arr[2]. Я не могу понять, как сделать оба.

Пример:T 25:00

while (scan.hasNextLine()){
  String[] data = scan.nextLine().split(" ");

   if (data[0] == "D"){
    myClock.getTime();
  }
  else if (data[0] == "A"){
    myClock.getAlarmTime();
  }
  else if (data[0] == "T"){
    myClock.setTime(data[1], data[2]);
  }
  else if (data[0] == "S"){
    myClock.setAlarmTime(data[1], data[2]);
  }
  else if (data[0] == "O"){
    myClock.setAlarmOn(true);
  }
  else if (data[0] == "F"){
    myClock.setAlarmOn(false);
  }
  else{
    myClock.quit();

говорит, что у меня несовместимые типы и что.String не может быть преобразовано в int. Так как мне конвертировать или сканировать два отдельно?

3 ответа

Вместо

String str[] = scan.nextLine().split(" ");

место

String str[] = scan.nextLine().split(" |:");
...............
if (str[0].equals("T"))
myClock.setTime(Integer.parseInt(str[1], Integer.parseInt(str[2]);

Еще одна проблема if (data[0] == "T" ) означает сопоставление строк

В Java, мы должны использовать equals() для проверки равенства строк, одинаковы ли они или нет.

Вместо

 if (data[0] == "T" )

использование

if (data[0].equals( "T" ))

Слабо основано на @Boris комментарии Паука

public class EnumCommand {

public static void main(String[] args) {

    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader("csv.dat"));
        String s;
        while ((s = br.readLine()) != null) {
            StringTokenizer st = new StringTokenizer(s);
            MyCommand.valueOf(st.nextToken()).execute(s);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }

}

private enum MyCommand {
    D {

        @Override
        public void execute(String predicate) {
            //getTime

        }
    },
    A {
        @Override
        public void execute(String predicate) {
            //getAlarm Time

        }
    },
    T {
        @Override
        public void execute(String predicate) {
            //setTime .. Parse here for time
            System.out.println(predicate);

        }
    },
    S {
        @Override
        public void execute(String predicate) {
            //set alarm Time Parse here for time
            System.out.println(predicate);

        }
    },
    O {
        @Override
        public void execute(String predicate) {
            //On alarm

        }
    },
    F {
        @Override
        public void execute(String predicate) {
            //Off alarm

        }
    };

    public abstract void execute(String predicate);
}
}

Если ваша ошибка в этой строке myClock.setAlarmTime(data[1], data[2]);, попробуйте преобразовать его в int.

Mby ваши функции для setAlarmTime а также setTime нужны целые числа, и вы передаете строки, компилятор обычно советует это.

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

myClock.setAlarmTime(Integer.valueOf(data[1]), Integer.valueOf(data[2]));

Кроме того, вы хотите отделить это T 25:00на это: { "T","25", "00" }

И с этой линией String[] data = scan.nextLine().split(" "); Вы получите: { "T","25:00" }

Вам нужно снова разделить ваши данные [1], прежде чем делать setAlarmTime а также setTime с:

String[] timeSplit = data[1].split(":");
myClock.setAlarmTime(Integer.valueOf(timeSplit[0]), Integer.valueOf(timeSplit[1]));
Другие вопросы по тегам