【问题标题】:Java: File reader, String separator by delimiters HelpJava:文件阅读器,由分隔符分隔的字符串帮助
【发布时间】:2011-08-04 07:32:17
【问题描述】:

我正在尝试在 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();
        }
    }
}

}

文本文件源代码在一行中包含“ Mo >> Larry”。如果 >> 中间只有一个名称,则此代码有效,但是当我添加更多名称时,会出现错误。

发生的错误信息:外部令牌:Mo

外部令牌:

【问题讨论】:

    标签: java string file arraylist preprocessor


    【解决方案1】:

    问题是您正在寻找下一个标记作为关闭三柱门,而这可能不是下一个标记。我会分解逻辑,以便您可以从输入文件中逐行读取。如果一行有您的检票口分隔符,请使用不同的扫描仪来拆分检票口之间的内容。这是代码。这适用于 wickets 和没有 wickets 的线路内的零到多个令牌。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多