2011-04-12 110 views
0

我想在java中創建一個預處理器,它將在源代碼中讀取它。我試着將代碼全部讀到一個字符串中。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(); 
     } 
    } 
} 

}

文本文件源代碼包含 「莫< < <莫拉里捲毛>>>拉里」 都在同一行。如果只有一個名字在< < < >>>中,但是當我添加更多時,此代碼有效。外部令牌:

發生

錯誤消息沫

外部令牌:< < < LineC:沫 [Mo]的異常在線程 「主」 java.util.InputMismatchException 在java.util.Scanner中.throwFor(未知來源) 在java.util.Scanner.next(未知來源) 在java.util.Scanner.next(未知來源) 在processLines.pLine(processLines.java:26) 在proProcess.main( proProcess.java:14)

回答

3

問題是,您正在尋找下一個令牌作爲關閉的小門,當這可能不是下一個令牌。我會打破邏輯,以便可以從輸入文件逐行閱讀。如果一行有您的檢票分隔符使用不同的掃描儀來分隔這些檢票之間的內容。這是代碼。這適用於在wicket和wicket中沒有許多標記的小令牌。

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