自动完成控制台文本

时间:2016-02-22 11:28:27

标签: java sqlite autocomplete console-application picocli

我需要创建一个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);
    }

编辑:

DatabaseServices类

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;
    }

有一些简单的方法吗???

3 个答案:

答案 0 :(得分:1)

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

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

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

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

enter image description here

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

答案 1 :(得分:0)

正如@DiegoMartinoia在评论中所说,你可以通过按键来做到这一点:

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

答案 2 :(得分:0)

如前所述,做那五个步骤。 但是要在控制台应用程序中自动完成命令,您可以使用Jline库。通过制表机实现其自动化。

最后,如果你没有使用JMX mBeans,你就不会使用Jconsole,但这仅仅是为了获取信息。(当然如果你打算用JMX做这个,那么这是无关紧要的)