文本文件到字符串矩阵java

Sus*_*nta 1 java matrix

我正在为学校做一个像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"}`
Run Code Online (Sandbox Code Playgroud)

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

小智 7

你可以...

使用属性文件

属性文件可以很容易地读入(并存储,但你不感兴趣)Java.类java.util.Properties可以简化这个过程,但它是相当简单的加载它,然后你访问它像一个Map.

hello.input=hi,hello,howdy,hey
hello.output=hi,hello,hey
Run Code Online (Sandbox Code Playgroud)

请注意那里的匹配格式.这有其自身的一系列问题和挑战,但它可以让您轻松地将内容输入和输出属性文件.

将其存储在JSON中

很多东西都使用JSON作为序列化格式.因此,您可以使用许多库读取和存储它们.它会使一些事情变得更容易并且有一系列挑战.

{
    "greeting":{ 
        "input":["hi","hello","howdy","hey"],
        "output":["hi","hello","hey"]
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的事情.然后再次阅读并将其存储到数据结构中.您可以将JSON存储在许多位置,例如文档数据库(如沙发),这样可以方便地进行更新,更改和访问......如果您正在运行该数据库.

这让我们...

嵌入数据库

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

自定义序列化

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

很多其他人

这只是冰山一角.有很多方法可以解决这个问题.

PS

请将变量的名称更改为Database小写的内容,以便更好地描述它等input2output.大写名称通常是为类名保留的(除非全部大写,在这种情况下它是最终的静态字段)