How to implement a FSM - Finite State Machine in Java

后端 未结 7 2218
渐次进展
渐次进展 2020-11-28 02:55

I have something to do for work and I need your help. We want to implement a FSM - Finite State Machine, to identify char sequence(like: A, B, C, A, C), and tel

7条回答
  •  感情败类
    2020-11-28 03:16

    Here is a SUPER SIMPLE implementation/example of a FSM using just "if-else"s which avoids all of the above subclassing answers (taken from Using Finite State Machines for Pattern Matching in Java, where he is looking for a string which ends with "@" followed by numbers followed by "#"--see state graph here):

    public static void main(String[] args) {
        String s = "A1@312#";
        String digits = "0123456789";
        int state = 0;
        for (int ind = 0; ind < s.length(); ind++) {
            if (state == 0) {
                if (s.charAt(ind) == '@')
                    state = 1;
            } else {
                boolean isNumber = digits.indexOf(s.charAt(ind)) != -1;
                if (state == 1) {
                    if (isNumber)
                        state = 2;
                    else if (s.charAt(ind) == '@')
                        state = 1;
                    else
                        state = 0;
                } else if (state == 2) {
                    if (s.charAt(ind) == '#') {
                        state = 3;
                    } else if (isNumber) {
                        state = 2;
                    } else if (s.charAt(ind) == '@')
                        state = 1;
                    else
                        state = 0;
                } else if (state == 3) {
                    if (s.charAt(ind) == '@')
                        state = 1;
                    else
                        state = 0;
                }
            }
        } //end for loop
    
        if (state == 3)
            System.out.println("It matches");
        else
            System.out.println("It does not match");
    }
    

    P.S: Does not answer your question directly, but shows you how to implement a FSM very easily in Java.

提交回复
热议问题