用字符串和int-Java扫描文件
所以我有一个.dat文件,它是一个列表。每一行都以一个字母开头,作为我的闹钟程序的命令,有些后面是时间格式的数字(XX:XX)。我需要扫描字母arr[0],以便程序知道要实现哪个方法,然后将整数从冒号中分离出来,得到arr[1]和arr[2]。我似乎不知道如何做到这两个 示例:T 25:00用字符串和int-Java扫描文件,java,split,delimiter,scanning,Java,Split,Delimiter,Scanning,所以我有一个.dat文件,它是一个列表。每一行都以一个字母开头,作为我的闹钟程序的命令,有些后面是时间格式的数字(XX:XX)。我需要扫描字母arr[0],以便程序知道要实现哪个方法,然后将整数从冒号中分离出来,得到arr[1]和arr[2]。我似乎不知道如何做到这两个 示例:T 25:00 while (scan.hasNextLine()){ String[] data = scan.nextLine().split(" "); if (data[0] == "D"){
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。那么如何分别转换或扫描这两个类型?而不是
String str[] = scan.nextLine().split(" ");
if (data[0] == "T" )
放置
还有一个问题是如果(数据[0]=“T”)
表示比较字符串
在java中,我们应该使用equals()
来检查字符串是否相等,无论两者是否相同
而不是
String str[] = scan.nextLine().split(" ");
if (data[0] == "T" )
使用
如果您的错误在这一行
myClock.setAlarmTime(数据[1],数据[2])代码>,尝试将其转换为int
Mby通过setAlarmTime
和setTime
的函数需要INT,并且您要传递字符串,编译器通常会建议这样做
试试这个:
myClock.setAlarmTime(Integer.valueOf(data[1]), Integer.valueOf(data[2]));
另外,您要将此t25:00
分隔为:{“T”、“25”、“00”}
并使用此行String[]data=scan.nextLine().split(“”)代码>您将获得:{“T”,“25:00”}
在执行setAlarmTime
和setTime
之前,您需要再次拆分数据[1]:
String[] timeSplit = data[1].split(":");
myClock.setAlarmTime(Integer.valueOf(timeSplit[0]), Integer.valueOf(timeSplit[1]));
大致基于@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);
}
}
我不会用扫描仪。我不会把整数分开。使用读取文件,然后将每行解析为a和a。Java是一种面向对象的语言——学习如何利用它,而不是与之抗争。继续…抱歉将其编辑为包含我的其余代码…haveCommand实现ClockCommand
,这是一个接口
,使用方法apply(LocalTime)
。然后,使用enum.valueOf
解析enum
后,只需调用命令.apply(time)
。无if..else
链。不兼容的类型:java.lang.String不能转换为intyea,我刚刚发现了这一点。多谢