1

我如何将下面的字符串分成它的部分。我需要分开的是每个 < Word > 包括字符串其余部分的尖括号。所以在下面的情况下,我会得到几个字符串 1.“我必须和你分手,因为” 2.“<原因>”(没有空格) 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++;
4

3 回答 3

1

看看使用StringTokenizer

于 2010-03-09T03:42:09.520 回答
0

使用正则表达式。

for (String token : text.split("(?=<)|(?<=>)")) {
    boolean isNT = token.startsWith("<");
    System.out.format("%s |%s|%n", isNT ? "NT" : " T", token);
}
于 2010-03-09T03:44:28.580 回答
0

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

BreakIterator 类还提供静态 getCharacterInstance()、 getWordInstance和 getLineInstance() 方法。这些方法返回 BreakIterator 实例,允许您分别在字符、单词和行级别进行解析。

于 2010-03-09T03:57:06.523 回答