2016-01-28 89 views
0

所以我有一個.dat文件,它是一個列表。每行以一個字母開頭,作爲我的鬧鐘程序的命令,其中一些以時間格式(XX:XX)的數字開頭。我需要掃描字母arr [0],以便程序知道要實現哪種方法,然後將冒號中的整數與arr [1]和arr [2]分開。我似乎無法弄清楚如何做到這一點。用String和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是一種面向對象的語言 - 學習如何使用它,而不是與之對抗。續... –

+0

抱歉編輯它以包括我的代碼的其餘部分 – DNH

+0

...有'命令實現ClockCommand'這是一個'接口'與'apply(LocalTime時間)'方法'。然後,當你用'Enum.valueOf'解析'enum'時,你只需要調用'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沒有工作_意味着什麼錯誤? @DrewHarden – Satya

+1

不兼容的類型:java.lang.String不能轉換爲int – DNH

0

如果你的錯誤是在這條線myClock.setAlarmTime(data[1], data[2]);,嘗試將其轉換爲int。

Mby你的函數爲setAlarmTimesetTime需要整數,你傳遞字符串,編譯器通常建議這個。

試試這個:

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]之前做setAlarmTimesetTime有:

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); 
} 
}