Java сканер читает только первую строку файла - PullRequest
0 голосов
/ 05 сентября 2018

Я написал этот код, потому что мне нужно прочитать какую-то строку файла, чтобы получить данные и поместить их в объект. Беда в том, что сканер читает только первую строку. Я пытаюсь выполнить печать System.out.println(sc.hasNext()); с этим и отладить код, но когда выполняется первый цикл, условие while (sc.hasNext ()) возвращает false. но в файле есть 2 строки.

Scanner sc =null;
    int[] counter=new int[users.length];


    for(int i=0;i<users.length-1;i++){
        sc= new Scanner(new FileReader("src/MailListUser"+String.valueOf(i+1)+".txt")).useDelimiter("\\s*^^\\s*");
        while(sc.hasNext()){
            String mail =sc.next();
            String [] data= mail.split(":::");
            Email email;
            String dat=data[5].replaceAll("_", " ");
            DateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy",Locale.ENGLISH);
            Date date = format.parse(dat);
            email = new Email(data[1],data[2],data[3],data[4],date,Integer.parseInt(data[6]));
            if(i+1==1) {
                counter[i]++;
                mbUser1.add(email);
            }
            else if(i+1==2){
                counter[i]++;
                mbUser2.add(email);
            }
            else if(i+1==3){
                counter[i]++;
                mbUser3.add(email);
            }

        }

    }
    sc.close();

есть код. файл содержит:

^^:::user1@unito.it:::user1@unito.it:::grbvfcsx:::yrdfsx:::Wed_Sep_05_09:25:51_CEST_2018:::-1568000361:::^^
  ^^:::user1@unito.it:::user1@unito.it:::rgvfcdsx:::trvedcs:::Wed_Sep_05_09:27:53_CEST_2018:::482784668:::^^

каждая строка этого файла начинается с ^^ и заканчивается ^^

Я не могу понять, почему этот код читает только одну строку

1 Ответ

0 голосов
/ 05 сентября 2018

В регулярных выражениях ^ - специальный символ. Он представляет начало ввода, а не просто символ ^.

Вам нужно экранировать это по вашему шаблону:

"\\s*\\^\\^\\s*"
...