Сканирование файла с помощью String и Int Java
Так что у меня есть файл.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. Так как мне конвертировать или сканировать два отдельно?
3 ответа
Вместо
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" ))
Слабо основано на @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);
}
}
Если ваша ошибка в этой строке myClock.setAlarmTime(data[1], data[2]);
, попробуйте преобразовать его в int.
Mby ваши функции для 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]));