解析字符串时的状态模式用法

时间:2012-05-07 10:11:45

标签: java parsing state

  

状态模式在解析String时很有用。国家意味着一部分   工作,就像一种方法。当你从字符串中解析一些单词时,你会将状态改为   一个新的

这意味着什么?我真的很困惑。

我有一个格式为“OPERATOR OBJECT [FILTER] [VALUES]”的字符串 在解析查询时,您应该使用State Pattern。有四种状态:OPERATOR,OBJECT,FILTER和VALUES“

1 个答案:

答案 0 :(得分:2)

我认为你引用的作者可以引用自动机理论的 acceptor 之类的东西,它使用不同的状态来存储当前的匹配进度。为了说明这一点,我将举一个例子。但是,状态与方法不同,但它们以不同的方式实现相同的方法。

/** Accepts strings which contain SO */
class Acceptor {

    private enum State {
        NOTHING_YET {
            @Override
            State nextState( char c ) {
                if(c == 'S') {
                    return FOUND_S;
                } else {
                    return NOTHING_YET;
                }
            }
        },
        FOUND_S {
            @Override
            State nextState( char c ) {
                if(c == 'O') {
                    return FOUND_SO;
                } else if(c == 'S') {
                    return FOUND_S;
                } else {
                    return NOTHING_YET;
                }
            }
        },
        FOUND_SO {
            @Override
            State nextState( char c ) {
                return FOUND_SO;
            }
        };

        abstract State nextState( char c );
    }


    boolean accept( String word ) {
        State current = State.NOTHING_YET;
        for(char c : word.toCharArray()) {
            current = current.nextState( c );
        }
        return current == State.FOUND_SO;
    }

}