我有一个文本文件,其内容如下所示:
Event=ThermostatNight,time=0
Event=LightOn,time=2000
Event=WaterOff,time=8000
Event=ThermostatDay,time=10000
Event=Bell,time=9000,rings=5
Event=WaterOn,time=6000
Event=LightOff,time=4000
Event=Terminate,time=12000
我必须使用扫描仪来抓取文件,然后遍历每行文本并隔离每个事件。例如,我需要在第一行中隔离“ThermostatNight”,然后将其放入一个数组中,下一个将是“LightOn”,依此类推。这是我正在研究中级Java课程的一个大型项目的一小部分。我已经能够使用下面显示的useDelimiter参数得到与我想要的完全相反的结果。有没有快速解决这个问题。请注意,我必须使用useDelimiter()方法。
public void readFile2() {
array2 = new ArrayList<String>();
while (s.hasNext()) {
s.useDelimiter("=(.*?),");
array2.add(s.next());
}
答案 0 :(得分:1)
您可以使用多个分隔符。
//scanner.useDelimiter("Event=|,time=([0-9]*)");
scanner.useDelimiter("Event=|,(.)+[\\r\\n]*Event=|,(.)+[\\r\\n]*");
//for better you can use this
//scanner.useDelimiter("Event=|,time=([0-9]**)[\\r\\n]**Event=|,time=([0-9]*)");
while (scanner.hasNext())
{
System.out.println(scanner.next());
}
答案 1 :(得分:1)
可能不是最好的,但它会起作用 因为您需要仅使用useDelimeter并且结构未更改 那么
public static void main(String[] args) {
Scanner sc;
try {
sc = new Scanner(new File("/home/xxx/text.txt"));
sc.useDelimiter(",time=(.*?)\\nEvent=");
ArrayList<String> eventlist = new ArrayList<String>();
String tmp = null;
if (sc.hasNext()) {
tmp = sc.next();
tmp = tmp.split("=")[1]; // Just First line
}
while (sc.hasNext()) {
eventlist.add(tmp);
System.out.println(tmp); // for test only remove it
tmp = sc.next();
}
tmp = tmp.split(",")[0];
eventlist.add(tmp);
System.out.println(tmp); // for test only , remove it
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}