当字符串被截断2个字符以生成一个集合时,是否可以生成java lambda表达式?

jecbmhm3  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(380)

字符串被两个字符分割成多个集合的元素。此时,只有英文字符的字母对有效,如果包含其他空格、数字或特殊字符,则该字母对将被丢弃。例如,如果输入“ab+”,则只有“ab”被视为multiset的元素,“b+”被丢弃。在多个集合元素之间进行比较时,忽略大小写字母之间的差异。”ab、“ab”和“ab”被视为同一元素。
我想把上面的每个部分都做成一个lambda。

ArrayList<String> aryChars1 = new ArrayList<String>();      

String pattern = "^[a-zA-Z]";
for (int i = 0; i < str1.length() - 1; i++)
{
    if (Pattern.matches(pattern, str1.substring(i, i+1))) {
        aryChars1.add(str1.substring(i, i+2));
    }

}
k7fdbhmy

k7fdbhmy1#

您的代码只检查两个字符集中的第一个字符是否为字母,例如。 "b+" 没有被丢弃。
为了获得更好的性能,您应该只编译一次正则表达式模式。
既然您想使用lambda,我会这样做:

String str1 = "Hello World";

List<String> aryChars1 = Pattern.compile("(?=([a-zA-Z]{2})).")
        .matcher(str1).results()
        .map(m -> m.group(1))
        .collect(Collectors.toList());
System.out.println(aryChars1);

输出

[He, el, ll, lo, Wo, or, rl, ld]

正如你所看到的 "o " 这一对被丢弃。

相关问题