Java读取过去保存的变量

Posted

技术标签:

【中文标题】Java读取过去保存的变量【英文标题】:Java reading past saved variables 【发布时间】:2013-12-19 16:23:47 【问题描述】:

我正在从正在扫描信息的用户输入中获取问题,并且我正在保存信息和原始问题。

保存问题+信息的最佳方式是什么,以便可以回忆它,以便我能够在刚刚提出的问题之前阅读 X 个问题并获取其中的信息/变量?

An example:

[User]"what is 1+1?"
[Reply]"two"
save information: "what is 1+1","two"

[User]"how is the dog?"
[Reply]"fine"
save information:"how is the dog?",subject = "dog", condition = "fine"

getQuestion(1) -> "what is 1+1?"
getInformation(current) -> subject = "dog" condition = "fine"

另外,使用 int(问题 X)、字符串(问题)或其他方式来调用每个问题的信息会更好吗?

到目前为止的代码:

Map<String,String> variable = new HashMap<>();
    public QuestionInfo(String name,String variable) 
        this.variable.put(name, variable);
    
    public String get(String name)
    if(variable.containsKey(name)) 
        return variable.get(name);
     else 
        return "";
    
    

我虽然关于使用:

  Map<String,QuestionInfo> Questions = new HashMap<>();

首先,但如果我想打电话,我不能使用 int 所以改为:

Map<Integer,QuestionInfo> Questions = new HashMap<>();

然后我可以将问题添加为第一条信息。

【问题讨论】:

您关心的是使用什么结构?或者在给定的应用程序类型中将它们存储在哪里? 是的,我想听听其他人对结构的想法,看看他们的声音是否比我的好,我不确定是保存为单个 .txt 文件还是单独的文件 我假设您考虑使用Map&lt;String,QuestionInfo&gt; 通过问题字符串查找信息的能力。如果这很有用,您可以同时创建Map&lt;String,QuestionInfo&gt;List&lt;QuestionInfo&gt;,并在创建新的QuestionInfo 实例时将其添加到地图和列表中。然后您将能够通过 int index 和问题字符串查找问题。 【参考方案1】:

由于您想要保留响应的顺序,您可能想要使用List。

然后你只需要决定制作什么样的列表。由于您有两个密切相关的项目 - 主题(字符串)和条件 - 我可能会创建一个自定义类:

import java.util.Map;
public class QuestionInfo 

    private String question;
    private Map<String, String> variables;

    public QuestionInfo(String question, Map<String, String> variables) 
        this.question = question;
        this.variables = variables;
    

    public String question() 
        return question;
    

    public Map<String, String> vars() 
        return variables;
    

然后您将创建您的列表来存储这些,例如:

List<QuestionInfo> questionList = new ArrayList<QuestionInfo>();

还有其他方法可以存储这些字符串(例如,您可以使用分隔符将它们连接起来,或使用字符串 [2]).. 但在我看来,这可能是以后最容易阅读和理解的方法。

这是用户输入内容的近似值,以及您将如何使用questionList + QuestionInfo 来存储数据:

[用户]“狗怎么样了?” [回复]“好”

Map<String, String> varMap = new HashMap<String, String>();
varMap.put("subject", "dog");
varMap.put("condition", "fine");
questionList.add(new QuestionInfo("how is the dog?", varMap));

现在您可以通过以下方式访问此信息:

questionList.get(0).question() // returns "how is the dog?"

questionList.get(0).vars().get("condition") // returns "fine"

请注意,这掩盖了实际收集用户输入的代码。

还有其他可能性。 例如,您可以将String... 传递给QuestionInfo 构造函数并在那里解析变量/创建映射。 您还可能希望将整个响应存储为与变量分开的字符串。 如果您有一组一致的要填充的键,您可能还想为键创建一个枚举。

【讨论】:

由于可以保存任意数量的具有任何名称的变量,我可以将“字符串主题,字符串响应”替换为“字符串...变量”但是我如何才能使用该数据*unknownVariableName*() ? 如果我对您的理解正确,我认为您一次尝试做太多事情。您将为每个问题和响应对创建一个新的QuestionInfo。使用列表可以处理任意数量的问题和答案这一事实。我将在我的原始答案中添加一个示例使用.. 是的,我想我是,但是我认为你误解了我的意思。问题和响应不是成对的,响应是存储在问题下的信息片段。它应该能够为每个问题单独命名每条信息的名称。我会用我到目前为止的代码更新问题。 啊啊是的..现在说得通了..我会更新我的答案【参考方案2】:

我想我会创建一个“问题”类来存储实际问题和您想要的信息(主题、条件等)并将它们存储在一个数组中。

一些代码添加了你关于有多个答案的评论(它缺少设置器,但我想你明白了):

public class Question 
    private String subject;
    private List<String> responses;

    public String getSubject()
        return subject;
    
    public String getResponse(int _index)
        if (_index <= response.size())
        
            return response.get(_index);
        
        return "";
    

【讨论】:

听起来是个好主意,但是每个问题可能有不同的未知数量的变量,这可能会导致问题。我必须有一个数组,每个元素都有一个单独的数组。我相信这是可能的

以上是关于Java读取过去保存的变量的主要内容,如果未能解决你的问题,请参考以下文章

java实现图片转字符图(看的过去的亚子)

java线程传值的问题

参数传递

BufferedReader 没有读取过去的空行 [关闭]

Prometheus 导出器 - 读取包含过去一天数据的 CSV 文件

需要保存为CSV格式上传身份号,从Excel复制文本过去,CSV里后几位都是000,怎么办?必须要保存为CSV上传