2013-02-06 78 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