java - 确定性有限自动机 - Java

标签 java regex boolean-logic

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

“a” - Not Acceptable

“ab”- 可以接受

“aaa bb” - Not Acceptable

“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);
            }
        }
    }
   }
}

最佳答案

你的第一个“words.matches”将只匹配“a”,如果你想匹配所有以“a”开头的单词,然后是你想要的其他内容必须使用“^a.*”,其他匹配相同。

关于java - 确定性有限自动机 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40366495/

相关文章:

java - Android 日期格式解析抛出未处理的异常

javascript - 如何匹配字符,但如果它们严格用引号引起来则不匹配

javascript - 从字符串中获取多个数字 1-10

algorithm - 出于缓存原因规范化 bool 表达式。有没有比真值表更有效的方法?

c++ - 简化对两个 boolean 值的4 if/else检查

java - react native 运行Android错误 "Task :app:javaPreCompileDebug FAILED"

java - 无法使用 java 运行时从 linux 平台上的另一个 jar 访问 jarfile

java - 如何在 JButton 工作期间更改 JLabel 文本?

php - 使用正则表达式和 PHP

typescript - TypeScript 的并集和交集类型的命名