2013-02-06 108 views
0

我正在研究一些與CSS類似的文件結構,但它與CSS有點不同
。 這裏是用Java解析CSS文件

<ELEMENT NAME>{ 
Element attributes..1 
Element attributes..2 
Element attributes..3 
} 

我已經寫了一個方法來獲取元素名稱

public String getElementName(File jSfile){ 
    String elementName=null; 
    StringBuffer sb = null; 
    try{ 
    BufferedReader br=new BufferedReader(new FileReader(jSfile)); 
    String line=null; 
    while((line=br.readLine())!=null){ 
    Pattern element=Pattern.compile("\\<(.+?)\\>",Pattern.DOTALL); 
    Matcher match=element.matcher(line); 
    match.find(); 
    return match.group(1); 
    } 
    } 
    catch(Exception e){ 
    return e.getLocalizedMessage(); 
    } 
    return elementName; 

} 

而且使用這樣的文件結構..

public static void main(String arg[]){ 
CSSReader cs=new CSSReader(); 
File f=new File("C:/Users/foo/bar/cascade.xyz"); 
String z=cs.getElementName(f); 
System.out.print(z); 
} 

但它總是說'No match found'

編輯 我發現該文件包含多個具有不同名稱的序列。 當我刪除所有其他的,只保留一個代碼的工作。

對不起,這裏是菜鳥.....沒有任何一個知道我會去MULTILINE ....感謝一噸 我要去哪裏錯了

回答

3

您有2個地方,你寫br.readLine()。第一個是在一個條件內,第二個在身體內。所以第一個讀取的行永遠不會被使用。我懷疑這是包含您正在查找的令牌的行。

嘗試修改此:

while(br.readLine()!=null){ 
    String line=br.readLine(); 

弄成這個樣子:

String line = null; 
while((line = br.readLine())!=null){ 
+0

沒有,依然沒有區別。 – lazyprogrammer

+0

請參閱編輯..感謝 – lazyprogrammer

0

你可以在while循環之前聲明你的串線,並改變你的支票while循環分配,並然後查空:

String line; 
while ((line = br.readLine()) != null){ 
    // Do stuff with line 
} 

編輯:更新了答案以反映更新的問題

要說明多個元素,您可以更改您的方法以使用匹配的每個字符串填充列表,而不是返回第一個匹配。 while循環完成後,返回該列表。

+0

這就是@davidrac建議的內容.. 仍然沒有區別。 – lazyprogrammer

+0

您是否嘗試通過調試進行迭代並檢查bufferedreader實際上是否正在生成數據? – MildWolfie

+0

是的,它讀取行並顯示它,但我用正則表達式聞到錯誤。 – lazyprogrammer