Java: средство чтения файлов, разделитель строк по разделителям Справка - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь создать препроцессор в Java, где он будет читать в исходном коде. Я пытался прочитать код всего в одну строку.

Вопрос: Как добавить строки в середине <<< >>> в свой собственный список массивов?

public class processLines  {
public void pLine (String FileName)throws IOException{
    Scanner scanner = null;
    try{
        scanner = new Scanner(new BufferedReader(new FileReader(FileName)));
        while (scanner.hasNext()) {
            String Line = "";
            String LineB = "";
            String LineC = "";
            ArrayList<String> inside = new ArrayList<String>();
            Line = Line + scanner.next()+ " ";
            System.out.println("outside token: "+ Line);
            StringTokenizer token = new StringTokenizer(Line);
            while(token.hasMoreTokens()&& token.nextToken() != null){
                LineB = Line;
                if(LineB.contains("<<<")){
                    if(!LineB.contains(">>>") ){
                        LineC = LineC + scanner.next()+ " "; 
                        inside.add(LineC);
                        System.out.println("LineC: " + LineC);
                        System.out.print(inside);
                    }
                        if(scanner.next(">>>") != null){
                            Line =  scanner.next();
                            System.out.println("Line INside:" + Line);
                        }
                }
            }
        }
    }
    finally {
        if (scanner != null) {
            scanner.close();
        }
    }
}

}

Текстовый файл sourceCode содержит «Mo <<< Mo Larry Curly >>> Larry», все в одной строке. этот код работает, если в середине <<< >>> есть только одно имя, но когда я добавил еще, я получаю ошибку.

Сообщение об ошибке: маркер извне: Mo

Внешний токен:

1 Ответ

3 голосов
/ 13 апреля 2011

Проблема в том, что вы ищете следующий токен, который будет закрывающими калитками, когда это может быть не следующий токен.Я бы разбил логику, чтобы вы могли читать построчно из входного файла.Если в строке есть разделители калитки, используйте другой сканер для разделения содержимого между калитками.Вот кодЭто работает от нуля до многих жетонов внутри калиток и линий без калиток.

public static void pLine (String FileName)throws IOException{
Scanner scanner = null;
try{
    scanner = new Scanner(new BufferedReader(new FileReader(FileName)));
    String line;
    ArrayList<String> inside;
    Scanner inner;
    int start;
    int end = 0;
    while (scanner.hasNextLine()) {
           line = scanner.nextLine();
           inside = new ArrayList<String>();
           start = line.indexOf("<<<", end);       
           end = line.indexOf(">>>", start+1);
           if (end > start) {
                inner = new Scanner(line.substring(start +3, end ));
                while (inner.hasNext()) {
                    inside.add(inner.next());
                }
            }
            System.out.println("inside : " + inside);
        }
    }
    catch (Throwable t) {
        t.printStackTrace();
    }
    finally {
        scanner.close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...