2016-01-28 2 views
0

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

Пример: 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. Итак, как мне конвертировать или сканировать два отдельно?

+1

Я бы не использовать сканер. Я бы не разделил целые числа. Прочитайте файл, используя ['Files.lines'] (https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines-java.nio.file.Path-), а затем проанализируйте каждую строку командой ['enum Command'] (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) и [' java.time.LocalTime'] (https : //docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html). Java - это язык OO - научитесь использовать это в своих интересах, а не бороться с ним. Продолжение ... –

+0

Извините, отредактировал его, чтобы включить остальную часть моего кода. – DNH

+0

... есть 'Command реализует ClockCommand', который является' интерфейсом' с методом 'apply (LocalTime time)'. Затем, когда вы проанализировали 'enum' с' Enum.valueOf', вам просто нужно вызвать 'command.apply (time)'. Нет 'if..else' цепей. Просто чистая, описательная логика OO. –

ответ

0

Вместо

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") средства compaing строки

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

Вместо

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

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

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

Я уже пробовал это, и это не сработало – DNH

+0

_it did not work_ означает, какая-нибудь ошибка? @DrewHarden – Satya

+1

несовместимые типы: java.lang.String не может быть преобразован в int – DNH

0

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

Ваши функции для 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])); 
0

свободно на основе @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); 
} 
}