自动完成控制台文本
Autocomplete console text
我需要创建一个 Java 控制台应用程序,向用户提供食物名称建议。此信息将从 sqlite
数据库文件中获取。用户将编写文本,程序将低声说出项目的名称。当用户想要完成文本时,他按下 TAB 键,应用程序将获得下一个项目。
我已经在 ArrayList 中记录了所有数据库项目。
My main idea(without everything except for the top text)
部分代码-
主要 class
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);
}
编辑:
数据库服务class
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;
}
有什么简单的方法吗???
正如@DiegoMartinoia 在他的评论中所说,您可以按下一个键来执行此操作:
- 搜索文本(如果超过 3 个字符,因为
性能)
- 按字母顺序排序
- 显示前 5 名
如前所述,执行这五个步骤。
但是要在控制台应用程序中自动完成命令,您可以使用 Jline 库。它通过制表符自动完成。
最后,如果您不使用 JMX mBeans,您就不会使用 Jconsole,但这只是为了提供信息。(当然,如果您打算使用 JMX,那么这就无关紧要了)
picocli Java 命令行解析库最近添加了自动完成功能。
这基于生成 bash 自动完成脚本。一旦用户获取完成脚本,bash shell 将显示命令、子命令或选项的可能完成(在 Windows 中,您可以使用 Cygwin 或 Babun)。如果查看 picocli 源代码,您可以看到如何为 Java 枚举生成可能的完成选项值列表。
您可以修改它以从数据库生成可能的完成选项列表,生成新的完成脚本,并在 运行 您的命令之前获取此脚本。
您可能还喜欢该库如何使您能够在使用帮助消息中使用 ANSI 颜色和样式。
免责声明:我是作者,因此有偏见。
我需要创建一个 Java 控制台应用程序,向用户提供食物名称建议。此信息将从 sqlite
数据库文件中获取。用户将编写文本,程序将低声说出项目的名称。当用户想要完成文本时,他按下 TAB 键,应用程序将获得下一个项目。
我已经在 ArrayList 中记录了所有数据库项目。
My main idea(without everything except for the top text)
部分代码- 主要 class
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);
}
编辑:
数据库服务class
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;
}
有什么简单的方法吗???
正如@DiegoMartinoia 在他的评论中所说,您可以按下一个键来执行此操作:
- 搜索文本(如果超过 3 个字符,因为 性能)
- 按字母顺序排序
- 显示前 5 名
如前所述,执行这五个步骤。 但是要在控制台应用程序中自动完成命令,您可以使用 Jline 库。它通过制表符自动完成。
最后,如果您不使用 JMX mBeans,您就不会使用 Jconsole,但这只是为了提供信息。(当然,如果您打算使用 JMX,那么这就无关紧要了)
picocli Java 命令行解析库最近添加了自动完成功能。
这基于生成 bash 自动完成脚本。一旦用户获取完成脚本,bash shell 将显示命令、子命令或选项的可能完成(在 Windows 中,您可以使用 Cygwin 或 Babun)。如果查看 picocli 源代码,您可以看到如何为 Java 枚举生成可能的完成选项值列表。
您可以修改它以从数据库生成可能的完成选项列表,生成新的完成脚本,并在 运行 您的命令之前获取此脚本。
您可能还喜欢该库如何使您能够在使用帮助消息中使用 ANSI 颜色和样式。
免责声明:我是作者,因此有偏见。