用字符串和int-Java扫描文件

用字符串和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"){

所以我有一个.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。那么如何分别转换或扫描这两个类型?

而不是

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是一种面向对象的语言——学习如何利用它,而不是与之抗争。继续…抱歉将其编辑为包含我的其余代码…have
Command实现ClockCommand
,这是一个
接口
,使用方法
apply(LocalTime)
。然后,使用
enum.valueOf
解析
enum
后,只需调用
命令.apply(time)
。无
if..else
链。不兼容的类型:java.lang.String不能转换为intyea,我刚刚发现了这一点。多谢