2011-03-30 76 views
0

嗨有 我正在構建我自己的StreamTokenizer,這將符合我的需求。 就像java的StreamTokenizer,我有一個nextToken()方法,返回一個整數代表找到的數據類型。 我想要做的是,如果令牌不匹配我使用的任何正則表達式模式,它將返回令牌本身作爲整數代碼。例如,標記'$'會導致返回一個數字,使得println(number)將打印$。 我不知道該怎麼做,任何人?在java中構建我自己的StreamTokenizer

謝謝!

+3

'回報「$」;'或'回報(INT)「$」;'然後'println((char)number)'也許?如果不是,請詳細解釋您的問題。 – 2011-03-30 13:00:08

+0

我會嘗試 - 當你使用StreamTokenizer,並且當前令牌不是TT_NUMBER或TT_WORD時,你可以切換(st.nextToken())並且有'$'的情況:這意味着它返回一個代表$符號的整數 – itamar 2011-03-30 13:30:29

回答

1

如果您想從一堆正則表達式構建詞法分析器,請查看解析器生成器,如ANTLR

如果你真的想手工滾你自己,那麼你可以隨時使用下面的語句:

// Matches tokens foo and bar 
Pattern myTokenDefinition = Pattern.compile("^(?:foo|bar)"); 

public boolean hasNext() { 
    return sourceText.length() != 0; 
} 

public String next() { 
    if (sourceText.length() != 0) { 
    Matcher m = myTokenDefinition.matcher(sourceText); 
    String token; 
    if (m.find()) { 
     token = m.group(); 
    } else { 
     token = sourceText.substring(0, 1); 
    } 
    sourceText = sourceText.substring(token.length()); 
    return token; 
    } 
    throw new NoSuchElementException(); 
}