2013-02-22 38 views
0

我試圖抓取文件中的<AU></AU>標記之間的文本,然後在新行上打印出結果。我需要用一個switch語句和一個名爲CharacterFromFileReader的幫助器類來完成這個任務,它逐個讀取文件中的每個字符。使用Java switch語句在特定HTML標記之間抓取文本

這是我想出了迄今爲止代碼:

package code; 

import java.util.HashMap; 

import util.general.CharacterFromFileReader; 

public class HW4 { 

String _toReturn = ""; 

public void authorScanner(String inputPath){ 
    CharacterFromFileReader reader = new CharacterFromFileReader(inputPath); 

    int state = 0; 

    while(reader.hasNext()){ 
     char c = reader.next(); 

     switch(state){ 
      case 0: 
       _toReturn = ""; 

       if(c=='<'){ 
        state = 1; 
       } 

      case 1: 
       if(c=='A'){ 
        state = 2; 
       } 

      case 2: 
       if(c=='U'){ 
        state = 3; 
       } 
      case 3: 
       if(c=='>'){ 
        state = 4; 
       } 
      case 4: 
       if(c=='<'){ 
        state = 5; 
       } 
       if(c != '<'){ 
        _toReturn = _toReturn + c; 
        state = 4; 
       } 
      case 5: 
       if(c=='/'){ 
        state = 6; 
       } 
      case 6: 
       if(c=='A'){ 
        state = 7; 
       } 
      case 7: 
       if(c=='U'){ 
        state = 8; 
       } 
      case 8: 
       if(c=='>'){ 
        System.out.println(_toReturn); 
        state = 0; 
       } 
       else{ 
        state = 0; 
       } 
     } 

    } 
} 

}

然而,當我運行authorScanner(的test.xml);,我得到以下的輸出:

> 
> 

這裏的test.xml的內容:

<AU>AUTHOR</AU> 

我在做什麼錯?我相信我已經設置了switch語句來搜索<AU>,然後讓它將以下字符附加到稱爲_toReturn的字符串。由於它將字符添加到字符串中,因此應該檢查字符'0​​',如果它存在,請繼續檢查結束標記</AU>。如果結束標籤存在,則打印出_toReturn。

關於如何寫出適當解決方案的任何提示/建議?

+1

當你說你「必須用switch語句來做到這一點」時,這實際上是學校作業中規定的一部分嗎?我問,因爲轉換聲明是一個可怕的方式來做到這一點。 – Aurand 2013-02-22 20:46:40

+0

是的,不幸的是,這是作業的一部分。 – Bob 2013-02-23 19:42:16

回答

0

看起來您在交換機中的每種情況下都缺少break;語句。如果你添加這些,看起來它可能會做你想要的。