首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java : Jline3 :使用多个单词自动完成

Java : Jline3 :使用多个单词自动完成
EN

Stack Overflow用户
提问于 2018-07-13 01:54:12
回答 1查看 350关注 0票数 0

我想使用多个单词自动完成,例如:

代码语言:javascript
复制
> we can<TAB>
welcome_trashcan  pecan_seaweed  yeswecan  canwest

所以所有的建议都应该包含这两个关键词。理想情况下,它应该适用于无限的关键字。

我读过完成wiki,但我不知道要走哪条路才能做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 03:03:57

我最后实现了一个新接口(它是用groovy编写的):

代码语言:javascript
复制
class MatchAnyCompleter implements Completer {
    protected final List<Candidate> candidateList = []

    MatchAnyCompleter(List<String> list) {
        assert list
        list.each {
            candidateList << new Candidate(AttributedString.stripAnsi(it), it, null, null, null, null, true)
        }
    }

    @Override
    void complete(final LineReader reader, final ParsedLine commandLine, final List<Candidate> selected) {
        assert commandLine != null
        assert selected != null
        selected.addAll(candidateList.findAll {
            Candidate candidate ->
                commandLine.words().stream().allMatch {
                    String keyword ->
                        candidate.value().contains(keyword)
                }
        })
    }
}

测试:

代码语言:javascript
复制
class MatchAnyCompleterTest extends Specification {
    def "Testing matches"() {
        setup:
            def mac = new MatchAnyCompleter([
                    "somevalue",
                    "welcome_trashcan",
                    "pecan_seaweed",
                    "yeswecan",
                    "canwest",
                    "nomatchhere"
            ])
            def cmdLine = new ParsedLine() {
                // non-implemented methods were removed for simplicity
                @Override
                List<String> words() {
                    return ["we","can"]
                }
            }
            List<Candidate> selected = []
            mac.complete(null, cmdLine, selected)
        expect:
            selected.each {
                println it.value()
            }
            assert selected.size() == 4
    }
}

产出:

代码语言:javascript
复制
welcome_trashcan
pecan_seaweed
yeswecan
canwest
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51316675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档