当前位置: 首页 > 工具软件 > JLine > 使用案例 >

java 补全月份_Jline实现java输入自动补全

何德寿
2023-12-01

java的控制台输入是很局限的,我们仅仅可得到它的输入,对于输入的过程是很难操控的,所以当我们想写一个人性化的输入体验的时候,是比较难实现的。还好java中有种jni的技术,它允许Java代码和其他语言写的代码进行交互。

Jline就是一个使用了C/C++实现的java类库,它可以让你更方便的处理控制台输入。

引入Jline,使用下面的maven配置

jline

jline

2.9

我们平常处理输入一般是这样的:

BufferedReader br

= new BufferedReader(new InputStreamReader(System.in));

String line = null;

do

{

line = br.readLine();

if(line != null)

{

//todo

}

}

while(line!=null && !line.equals("exist"))

在使用了Jline之后,一样的书写形式:

ConsoleReader reader = new ConsoleReader();

String line = null;

do

{

line = reader.readLine("input>");

if(line != null)

{

//TODO

}

}

while(line!=null && !line.equals("exist"))

你便拥有了一个比较友好的输入体验了。它可以实现光标的移动,通过上下方向键切换历史命令等操作。

如果你希望有更强大的自动补全功能。你可以给ConsoleReader 设一个jline.console.completer.Completer接口实现类

public interface Completer

int complete(String buffer, int cursor, List candidates);

}

其中buffer是当前用户输入的内容,cursor表示光标的位置,candidates表示你想补全的候选项。返回值很重要,表示你要再哪个位置补全你的内容

假设用户的输入是ls my xxxxxx

目前用户的光标在my后面,你想帮用户补全为myfoler或者myfile。你要这么写:

public class MyCompleter implements Completer

{

@Override

public int complete(String buffer, int cursor, List candidates)

{

if(buffer.length() > 0 && cursor >0)

{

String substring = buffer.substring(0,cursor);

if(substring.endsWith("my"))

{

candidates.add("myfolder");

candidates.add("myfile");

return cursor-2;

}

}

return cursor;

}

}

然后指定给comsoleReader对象即可:

MyCompleter myCompleter = new MyCompleter();

reader.addCompleter(myCompleter);

如果你的candidates有多个候选项,它会帮你列举出来,如果只有一个,它会帮你自动补全,当你的候选项都是xxx开头的,它会帮你补全一部分。

反正功能和vi,eclipse等ide里的自动补全功能一样强大。

Jline还有好多功能,例如获取历史,快捷键,移动光标,清屏等功能,它很强大,你只要知道有这么个东西,再去看看代码,看看它的成员方法,什么都是可以解决的,这里就不再赘述了。

 类似资料: