官术网_书友最值得收藏!

2.5.1 運算

BasicOperations中包含一些Automaton運算。Intersection()方法用于求交集。例如:

        //創(chuàng)建一個可以接收A~W字符的自動機
        Automaton a = BasicAutomata.makeCharRange('A', 'W');
        Automaton b = BasicAutomata.makeCharRange('D', 'W');
        Automaton c = BasicOperations.intersection(a, b);
        System.out.println(BasicOperations.run(c, "A")); //輸出false
        System.out.println(BasicOperations.run(c, "W")); //輸出true

union()方法用于求并集。例如:

        Automaton a = BasicAutomata.makeCharRange('D', 'W');
        Automaton b = BasicAutomata.makeCharRange('A', 'C');
        Automaton c = BasicOperations.union(a, b);
        System.out.println(BasicOperations.run(c, "A")); // 輸出true
        System.out.println(BasicOperations.run(c, "W")); // 輸出true

concatenate()方法用于連接兩個自動機。例如:

        Automaton a = BasicAutomata.makeChar('W');
        Automaton b = BasicAutomata.makeChar('W');
        Automaton c = BasicOperations.concatenate(a, b);
        System.out.println(BasicOperations.run(c, "WW")); // 輸出true
        System.out.println(BasicOperations.run(c, "WWW")); // 輸出false

repeat()方法表示重復0次或者多次。例如重復字符“W”零次或者多次:

        Automaton a = BasicAutomata.makeChar('W');
        Automaton c = BasicOperations.repeat(a);
        System.out.println(BasicOperations.run(c, "WW")); // 輸出true
        System.out.println(BasicOperations.run(c, "WWW")); // 輸出true

determinize()方法表示把NFA轉換成DFA。

        a.deberminize();

復雜的正則表達式難以維護。“[yY]es”這樣的正則表達式可以寫成如下等價的Automaton:

        Automaton a = BasicAutomata.makeChar('Y'); //創(chuàng)建一個字符W組成的自動機
        Automaton b = BasicAutomata.makeChar('y');
        Automaton c = a.union(b);
        Automaton d = c.concatenate(BasicAutomata.makeString("es"));
        //使用它
        System.out.println(BasicOperations.run(d, "y yes")); //輸出true
主站蜘蛛池模板: 清涧县| 海安县| 东城区| 彰武县| 双江| 年辖:市辖区| 西宁市| 新田县| 梓潼县| 南部县| 莱州市| 浪卡子县| 萍乡市| 南昌市| 芦溪县| 郑州市| 凤城市| 剑河县| 望奎县| 重庆市| 正镶白旗| 军事| 南郑县| 桃江县| 昌乐县| 和田县| 车险| 奉贤区| 霍城县| 西充县| 始兴县| 泰来县| 罗江县| 利辛县| 弋阳县| 松桃| 花莲市| 林西县| 横山县| 新绛县| 溧阳市|