【问题标题】:Autocomplete console text自动完成控制台文本
【发布时间】:2021-03-28 01:50:16
【问题描述】:

我需要创建一个 Java 控制台应用程序,为用户提供食物名称建议。此信息将从sqlite 数据库文件中获取。用户将编写文本,程序将低声说出项目的名称。当用户想要完成文本时,他按 TAB 键,应用程序将获得下一项。 我已经在 ArrayList 中记录了所有数据库项。

My main idea(without everything except for the top text)

部分代码 - 主类

    Scanner sc=new Scanner(System.in);
    ArrayList<Food> foodList= DatabaseServices.loadAllFood();
    ArrayList<String> foodNameList=new ArrayList();
    String nameFood;

    while (condition) {//when I have all recipe names
      //some code
      nameFood=sc.nextLine();
      foodNameList(nameFood);
    }

编辑:

数据库服务类

public ArrayList<food> loadAllFood() {//fetch data and sort them
        ArrayList<food> foodList = new ArrayList<>();
        try {
            String SQL = "SELECT * FROM foods ";
            ResultSet data = MyDatabaseConnection.executeQuery(SQL);


            do {
                Food food= new Food(data.getInt("food_id"),
                        data.getString("nfood_nazev"),
                        data.getInt("food_bilkoviny"),
                        data.getInt("food_sacharidy"),
                        data.getInt("food_tuky"));
                foodList .add(potravina);
            } while (data.next());

            Collections.sort(foodList );

        } catch (SQLException ex) {
            Logger.getLogger(DatabaseServices.class.getName()).log(Level.SEVERE, null, ex);
        }
    return foodList;
    }

有什么简单的方法吗???

【问题讨论】:

  • 1) 获取数据 2) 对它们进行排序 3) 文本框的 onChange,对列表进行二进制搜索,以查找作为输入的超字符串的最接近匹配项(如果有) 4) 如果有的话,显示它在建议中
  • 1),2) 完成 3) 它不应该是文本框,而是 jconsole。我解释得很糟糕:/。我想使用 foreach 和条件的列表搜索,如果有类似的字符串。( string+".*" )

标签: java sqlite autocomplete console-application


【解决方案1】:

picocli Java 命令行解析库最近添加了自动完成功能。

这是基于生成一个 bash 自动完成脚本。一旦用户获取完成脚本,bash shell 将显示命令、子命令或选项的可能完成(在 Windows 中,您可以使用 Cygwin 或 Babun)。如果您查看 picocli 源代码,您可以看到如何为 Java 枚举生成可能的完成选项值列表。

您可以修改它以从数据库生成可能的完成选项列表,生成新的完成脚本,并在运行命令之前获取此脚本。

您可能还喜欢该库如何让您在使用帮助消息中使用 ANSI 颜色和样式。

免责声明:我是作者,因此有偏见。

【讨论】:

    【解决方案2】:

    正如@DiegoMartinoia 在他的评论中所说,您可以通过按键来执行此操作:

    1. 搜索文本(如果有超过 3 个字符,因为 性能)
    2. 按字母排序
    3. 显示前 5 名

    【讨论】:

      【解决方案3】:

      如前所述,执行这五个步骤。 但是要在控制台应用程序中自动完成命令,您可以使用 Jline 库。它通过制表符自动补全。

      最后,如果您不使用 JMX mBeans,您将不会使用 Jconsole,但这只是为了提供信息。(当然,如果您打算使用 JMX,那么这无关紧要)

      【讨论】:

        猜你喜欢
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 2016-11-28
        • 1970-01-01
        相关资源
        最近更新 更多