确定性有限自动机 - Java

时间:2016-11-01 18:39:20

标签: java regex boolean-logic

我需要创建具有字母的DFA:{a,b,c}&这个字母表接受第一个和最后一个字母不同的单词。 即。

“a” - 是不可接受的

“ab” - 可以接受

“aaa bb” - 是不可接受的

“cbba” - 可以接受

我首先尝试检查开头是否有“a”,但是出了点问题,特别是如果我有i.o. file.txt中的“ab”或“ac”。

来源:

import java.io.*;
import java.util.ArrayList;

public class Task
{

public static void main(String[] args) throws FileNotFoundException, IOException 
{
    BufferedReader reader = new BufferedReader(new FileReader("file.txt ")); 
    ArrayList<String> wordList = new ArrayList<>();

    String line = null;

    while ((line = reader.readLine()) != null) 
    {
        wordList.add(line);
    }

    for (String word : wordList) 
    {
        if (word.matches("^a"))
        {   
            if (word.matches("ab") || word.matches("^ac"))
            {
                 System.out.print(word+" - OK\n");
            }
            else
            {
                System.out.print(word+" - STOP (word doesn't exists in alphabet)\n");
                System.exit(0);
            }
        }
    }
   }
}

1 个答案:

答案 0 :(得分:0)

您的第一个“words.matches”只会匹配“ a ”,如果您希望匹配所有以“ a ”开头的单词,然后是其他内容必须使用“ ^ a。* ”,其他匹配也一样。

相关问题