Java:文件阅读器,字符串分隔符分隔符帮助

时间:2011-04-12 23:41:42

标签: java string file arraylist preprocessor

我正在尝试在java中创建一个preProcessor,它将在源代码中读取。我试着将所有代码读取到一个字符串中。

问题:如何在<<<<<<<<< >>>到它自己的某种数组列表。

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&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; Mo Larry Curly&gt;&gt;&gt;&gt; Larry”。如果&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; &GT;&GT;&GT;但是当我添加更多时,我收到了错误。

出现错误消息:外部令牌:Mo

外部令牌:&lt;&lt;&lt; LineC:莫 [Mo]线程“main”java.util.InputMismatchException中的异常     在java.util.Scanner.throwFor(未知来源)     在java.util.Scanner.next(未知来源)     在java.util.Scanner.next(未知来源)     at processLines.pLine(processLines.java:26)     在proProcess.main(proProcess.java:14)

1 个答案:

答案 0 :(得分:3)

问题在于,当您可能不是下一个标记时,您正在寻找下一个标记为关闭小门。我打破逻辑,以便您可以从输入文件中逐行读取。如果一条线有你的wicket分隔符,则使用不同的扫描仪在wicket之间分割内容。这是代码。这适用于wick和wick的wickets和line内的零到多个令牌。

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