解析一个字符串,语法文件

时间:2010-03-09 03:35:07

标签: java parsing grammar text-parsing

如何将下面的字符串分成几部分。我需要分开的是每个< Word>包括字符串其余部分的尖括号。所以在下面的例子中,我最终会得到几个字符串1.“我必须和你分手,因为”2.“< reason>” (没有空格)3。“。但我们仍然是”4.“<免责声明>” 5.“。”

I have to break up with you because <reason> . But let's still <disclaimer> .
下面是我现在拥有的(丑陋......)

boolean complete = false;
    int begin = 0;
    int end = 0;
        while (complete == false) {
        if (s.charAt(end) == '<'){
            stack.add(new Terminal(s.substring(begin, end)));
            begin = end;
        } else if (s.charAt(end) == '>') {
            stack.add(new NonTerminal(s.substring(begin, end)));
            begin = end;
            end++;
        } else if (end == s.length()){
            if (isTerminal(getSubstring(s, begin, end))){
                stack.add(new Terminal(s.substring(begin, end)));
            } else {
                stack.add(new NonTerminal(s.substring(begin, end)));
            }
            complete = true;
        }
        end++;

3 个答案:

答案 0 :(得分:1)

查看使用StringTokenizer

答案 1 :(得分:0)

使用正则表达式。

for (String token : text.split("(?=<)|(?<=>)")) {
    boolean isNT = token.startsWith("<");
    System.out.format("%s |%s|%n", isNT ? "NT" : " T", token);
}

答案 2 :(得分:0)

实际上使用BreakIterator将是一种更好的方法。

  

BreakIterator类也提供   static getCharacterInstance(),    getWordInstance 和getLineInstance()   方法。这些方法回归   允许您使用的BreakIterator实例   解析字符,单词和   行级别。