使用StreamTokenizer获取下一个标记和剩余的String

时间:2014-04-16 16:16:02

标签: java

我有一个StreamTokenizer,可以对String进行标记。我感兴趣的是从String中获取下一个标记的方法,以及剩余的String(没有我们刚刚使用的标记)。

public static void parseString(String s){
    StreamTokenizer st = new StreamTokenizer(new StringReader(s));

    try {
        while (st.nextToken() != st.TT_EOF){
            if (st.ttype == st.TT_WORD){
                System.out.println("Word: " + st.sval);
                if (st.sval.equals("start")){
                    start(st.sval, ???)
                }
            }
            else if (st.ttype == st.TT_NUMBER){
                System.out.println("Number: " + st.nval);

            }
            else if (st.ttype == '\''){
                System.out.println(st.sval);
            }
            else{
                System.out.println((char)st.ttype);
            }
        }
    } catch (IOException e){}
}



public String start(String text, String theRest){
    return "<start>" + text + "" + parseString(theRest) + "</start>";
}

我尝试过的一些事情:

  • 我尝试过只使用原始的String,但StreamTokenizer在对它进行标记后不会改变它(我忘记了这个词来描述它)。

  • 我可以找到当前令牌的索引,并将该令牌从原始字符串中分割出来。

我想知道是否有更优雅的方式来解决这个问题?

1 个答案:

答案 0 :(得分:1)

关于第一个要点,我相信你想到的这个词可能是&#34;不可变的&#34;。你纠正了,任何似乎在操纵String的东西实际上是在创建一个新的字符串;原件保持不变。

对于第二个要点,坦率地说我也会提出相同的建议。目前我想不出更好的方法。

这是一个一般例子:

int startIndex = s.indexOf(currentToken) + currentToken.length;

String remainingString = s.subString(startIndex, s.length-1);

如果我的字符串是&#34;您好我的名字是Paul&#34;,并且当前令牌是&#34;名称&#34;,remainingString的结果应该是&#34;是保罗&#34;。

您可以轻松地将其封装在某个帮助程序中,以帮助保持清洁和分离。

可能不是你正在寻找的答案,但希望这有点帮助。