所以我有一个列表的.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。那么我该如何单独转换或扫描这两个?
答案 0 :(得分: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" )
意味着比较字符串
在java中,我们应该使用equals()
检查字符串是否相同,无论两者是否相同。
而不是
if (data[0] == "T" )
使用
if (data[0].equals( "T" ))
答案 1 :(得分:0)
如果您的错误位于此行innerHTML
,请尝试将其转换为int。
Mby你的myClock.setAlarmTime(data[1], data[2]);
和setAlarmTime
的函数需要整数并且你正在传递字符串,编译器通常会建议这个。
试试这个:
setTime
此外,您希望将此myClock.setAlarmTime(Integer.valueOf(data[1]), Integer.valueOf(data[2]));
分隔为:{" T"," 25"," 00" }
使用此行T 25:00
,您将获得:{" T"," 25:00" }
您需要在执行String[] data = scan.nextLine().split(" ");
和setAlarmTime
之前再次拆分数据[1]:
setTime
答案 2 :(得分: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);
}
}