有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

文本文件到字符串矩阵java

我正在为学校制作一个类似Cleverbot的自动聊天客户端。我所有的东西都在工作,但我需要一种方法来建立一个反应的知识库。我打算制作一个矩阵,包含所有我需要机器人说出的响应,但我认为每次我想向机器人添加响应时都很难编辑代码。这是我为知识库矩阵编写的代码:

    `String[][] Database={
    {"hi","hello","howdy","hey"},//possible user input
    {"hi","hello","hey"},//response
    {"how are you", "how r u", "how r you", "how are u"},
    {"good","doing well"}`

如何从文本文件中生成这样的矩阵?有没有比读取文本文件更好的方法来处理这个问题


共 (2) 个答案

  1. # 1 楼答案

    你可以

    使用properties文件

    属性文件可以很容易地读入(并从中存储,但您对此不感兴趣)Java。类java.util.Properties可以使这变得更容易,但是加载它然后像^{一样访问它是fairly simple

    hello.input=hi,hello,howdy,hey
    hello.output=hi,hello,hey
    

    注意这里的匹配格式。这有其自身的一系列问题和挑战需要解决,但它允许您轻松地将内容拉入和拉出属性文件

    将其存储在JSON

    很多东西都使用JSON作为序列化格式。因此,有lots of libraries可以用来read and store from it。它将再次使一些事情变得更容易,并有自己的一系列挑战

    {
        "greeting":{ 
            "input":["hi","hello","howdy","hey"],
            "output":["hi","hello","hey"]
        }
    }
    

    差不多吧。然后,再次阅读并将其存储到数据结构中。您可以将JSON存储在许多地方,例如文档数据库(如couch),这样可以方便地进行更新、更改和访问。。。考虑到你在运行那个数据库

    这让我们想到

    Embedded databases

    有很多数据库,您可以将它们放在应用程序中,像访问数据库一样访问它。很好的查询,对象之间的正确关系。当您真正想要一个数据库时,使用数据库有很多好处,而不是把字符串拖在一起,自己做所有的工作

    Custom serialization

    您可以创建一个类(而不是二维数组),然后将数据存储在一个类中(在该类中,数据可能是二维数组,但这是一个实现细节)。此时,您可以实现Serializable,编写writeObjectreadObject方法,并将数据以某种方式存储在文件中,然后直接读回对象。如果您具有将新事物添加到此应用程序(或使用相同类的其他应用程序)中的管理能力,则可以放弃它的可读性,使用管理工具(您编写的)来更新对象

    很多其他的

    这只是冰山一角。有很多方法可以做到这一点

    附则

    请将变量的名称从Database改为更能描述它的小写字母,如input2output或类似的字母。大写名称通常为类名保留(除非其全部大写,在这种情况下,它是最终的静态字段)

  2. # 2 楼答案

    一个常见的解决方案是将数据转储到属性文件中,然后使用标准的^{}方法加载它

    一旦有了这样的数据,就可以通过类似于地图的界面访问数据

    您可以找到在文件中存储数据的不同方式,如:

    userinput=hi,hello,howdy,hey
    response=hi,hello,hey
    ...
    

    然后,读取文件时,可以拆分逗号上的值:

    String[] expectHello = properties.getProperty("userinput").split(",");