在Java中使用useDelimiter()来隔离一段文本

时间:2013-12-10 02:02:09

标签: java

我有一个文本文件,其内容如下所示:

   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());
         }

2 个答案:

答案 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();
    }
}