我正在尝试从字符串中排除所有出现的双字。
所以下面我有一些代码可以做到这一点。
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
匹配:多洛尔坐下
我想要的结果是:
匹配:Lorem ipsum
匹配:ipsum dolor
匹配:多洛尔坐下
匹配:坐得住
答案 0 :(得分:1)
仅匹配每个单词,而不匹配两个单词的每个组合。 然后保留最后一个单词,每当找到一个新单词时,都存储一个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
答案 1 :(得分:1)
尝试此模式(?<= |^)(?=([^ ]+ [^ ]+))
说明:
(?<= |^)
-向后看,断言前面是空格还是字符串^
(?=([^ ]+ [^ ]+))
-正向前进,断言以下内容是:[^ ]+
除空格以外的一个或多个字符,空格,以及空格以外的一个或多个字符
如评论中所建议,此模式可以稍微简化:(?=\b([^ ]+ [^ ]+))