首页 > 解决方案 > 获取Java中所有出现的二元组

问题描述

我正在尝试从字符串中获取所有出现的二元组。

所以下面我有一些代码可以完成其中的一些。

String testString = "Lorem ipsum dolor sit amet.";

Pattern pat = Pattern.compile("\\w+ \\w+");
Matcher mat = pat.matcher(testString);

while (mat.find()) {
    System.out.println("Match: " + mat.group());
}

我得到的是:

匹配:Lorem ipsum

搭配:dolor sit

而我想要的结果是:

匹配:Lorem ipsum

匹配:ipsum dolor

搭配:dolor sit

比赛:坐在一起

标签: javaregex

解决方案


仅匹配每个单词,而不是两个单词的每个组合。然后保存最后一个单词,每当找到一个新单词时,就存储一个 doublet。

String testString = "Lorem ipsum dolor sit amet.";

Pattern pattern = Pattern.compile("\\w+");
Matcher matcher = pattern .matcher(testString);
String lastSingleWord = null;
List<String> results = new ArrayList<>();

while (matcher.find()) {
    String singleWord = matcher.group(0);
    if (lastSingleWord != null) {
        results.add(lastSingleWord + " " + singleWord);
    }
    lastSingleWord = singleWord;
}

之后,如果需要,您可以输出列表,或随意使用它。

results.stream().forEach(System.out::println);
// Lorem ipsum
// ipsum dolor
// dolor sit
// sit amet

推荐阅读