2014-11-17 26 views
0

我正在從事Java中的任務,它要求我從.txt文件中讀取值,以便告訴程序執行什麼。如何解析txt文件中的特定值?

Example: 
/* 
script.txt contains the following 

decreaseKey(2, 35) 
delete(p) 
*/ 

// What I have tried doing so far: 

int p = Integer.parseInt(inputLine.substring(7)); // doesnt work if p is larger then a single  char 
int p = Integer.parseInt(inputLine.substring(12, 14)); // too specific, if value was 238792 it wouldn't work. 

而且棘手的問題,我發現是爲decreaseKey我需要解析2個不同的值,並通過這樣做,我爲INT P中的同樣的事情兩次,並將它傳遞到我的功能...這顯然不會在這種情況下工作。

任何有關如何正確解析script.txt中的每條指令,以便我的程序中的值始終與txt文件中傳遞的值匹配的建議將非常棒!

+0

也許你可以通過解析取決於支架的位置的命令,而不是依賴於硬啓動編碼後的位置,然後決定你需要爲命令解析多少參數。 – Smutje

+0

你需要從script.txt輸出什麼內容? – SMA

回答

0

這將是一大筆工作 - 您需要更正式地定義您正在解析的語言。

假設這是一個非常簡單的語法我想通過運行Scanner在文件開始並觀察它發現,我怎麼可能會調整它得到的東西,我想要做什麼。

如果你需要更復雜的話,請看中間件來幫助你,比如有用解析器的編譯器 - cup

0

最近我有同樣的問題,你可以根據正則表達式匹配有用找到這段代碼:

final String str = "decreaseKey(2, 35)"; 

    final String normalized = str.replaceAll("\\s", ""); 
    System.out.println(normalized); 

    Pattern pattern = Pattern.compile("decreaseKey\\((\\d+),(\\d+)\\)"); 
    Matcher matcher = pattern.matcher(normalized); 
    System.out.println("matches="+matcher.matches()); 

    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2));