文本文件到字符串矩阵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"}`
如何从文本文件中生成这样的矩阵?有没有比读取文本文件更好的方法来处理这个问题
# 1 楼答案
你可以
使用properties文件
属性文件可以很容易地读入(并从中存储,但您对此不感兴趣)Java。类java.util.Properties可以使这变得更容易,但是加载它然后像^{一样访问它是fairly simple
注意这里的匹配格式。这有其自身的一系列问题和挑战需要解决,但它允许您轻松地将内容拉入和拉出属性文件
将其存储在JSON
很多东西都使用JSON作为序列化格式。因此,有lots of libraries可以用来read and store from it。它将再次使一些事情变得更容易,并有自己的一系列挑战
差不多吧。然后,再次阅读并将其存储到数据结构中。您可以将JSON存储在许多地方,例如文档数据库(如couch),这样可以方便地进行更新、更改和访问。。。考虑到你在运行那个数据库
这让我们想到
Embedded databases
有很多数据库,您可以将它们放在应用程序中,像访问数据库一样访问它。很好的查询,对象之间的正确关系。当您真正想要一个数据库时,使用数据库有很多好处,而不是把字符串拖在一起,自己做所有的工作
Custom serialization
您可以创建一个类(而不是二维数组),然后将数据存储在一个类中(在该类中,数据可能是二维数组,但这是一个实现细节)。此时,您可以实现Serializable,编写
writeObject
和readObject
方法,并将数据以某种方式存储在文件中,然后直接读回对象。如果您具有将新事物添加到此应用程序(或使用相同类的其他应用程序)中的管理能力,则可以放弃它的可读性,使用管理工具(您编写的)来更新对象很多其他的
这只是冰山一角。有很多方法可以做到这一点
附则
请将变量的名称从
Database
改为更能描述它的小写字母,如input2output
或类似的字母。大写名称通常为类名保留(除非其全部大写,在这种情况下,它是最终的静态字段)# 2 楼答案
一个常见的解决方案是将数据转储到属性文件中,然后使用标准的^{} 方法加载它
一旦有了这样的数据,就可以通过类似于地图的界面访问数据
您可以找到在文件中存储数据的不同方式,如:
然后,读取文件时,可以拆分逗号上的值: