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()。1つ目はwhile状態内にあり、2つ目は体内にあります。したがって、最初の行によって読み取られた行は使用されません。これはあなたが探しているトークンを含む行だと思います。

これを変更してみてください:

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

このようなものに:

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

whileループの前に文字列行を宣言し、whileループのチェックを変更して割り当て、次にnullをチェックすることができます。

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

編集:更新された質問を反映するために更新された回答

複数の要素を説明するために、最初の一致を返すのではなく、一致する各文字列でリストを埋めるようにメソッドを変更できます。whileループが完了したら、そのリストを返します。

于 2013-02-06T17:52:53.550 に答える