使用Java switch语句在特定HTML标记之间抓取文本

时间:2013-02-22 20:43:20

标签: java string text switch-statement tokenize

我正在尝试抓取文件中<AU></AU>个标记之间的文本,然后在新行上打印出结果。我需要使用switch语句和一个名为CharacterFromFileReader的辅助类来执行此操作,该类将逐个读取文件中的每个字符。

这是我到目前为止提出的代码:

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的String中。因为它将字符附加到字符串,它应该检查字符'&lt;',如果它存在,则继续检查结束标记</AU>。如果存在结束标记,则打印_toReturn。

有关如何编写正确解决方案的任何提示/建议?

1 个答案:

答案 0 :(得分:0)

在您的交换机中的每个案例之后,您似乎缺少break;语句。如果你添加它们,看起来它可能会按你的意愿行事。