0

我正在研究涉及类似于 CSS 的文件结构但它与
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'

编辑我发现该文件包含超过 1 个具有不同名称的序列。当我删除所有其他的并只保留一个时,代码就可以工作了。

很抱歉在这里是菜鸟.....有人知道我将如何使用多线......非常感谢我哪里错了

4

2 回答 2

3

你有 2 个地方可以写br.readLine()。第一个在while 条件内,第二个在body 内。所以第一个读取的行永远不会被使用。我怀疑这是包含您要查找的令牌的行。

尝试改变这个:

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

变成这样:

String line = null;
while((line = br.readLine())!=null){
于 2013-02-06T17:46:20.337 回答
0

您可以在 while 循环之前声明您的 String 行,并将您对 while 循环的检查更改为分配,然后检查 null:

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

编辑:更新答案以反映更新的问题

要考虑多个元素,您可以更改方法以使用每个匹配的字符串填充列表,而不是返回第一个匹配项。while 循环完成后,返回该列表。

于 2013-02-06T17:52:53.550 回答