使用 Java 8 Streams 从列表中查找包含字母和数字的字符串[关闭]

问题描述 投票:0回答:1

我想从给定列表中查找包含字母和数字的所有字符串。

List<String> list = Arrays.asList("ABC","123ABC","def","def45","2GHI","u3ht",
              "zxy","t12pp", "kkk");

对于此示例,它应该仅打印包含字母和数字的字符串: - 123ABC、def45、2GHI、u3ht、tt12pp

我尝试了以下方法,但没有成功。

List<String> alphanNist = list.stream() 
      .filter(s->s.matches("^[a-zA-Z0-9]*$")
      .collect(Collectors.toList()); 
java regex java-stream
1个回答
1
投票

import java.util.*;
import java.util.stream.Collectors;
import java.util.regex.*;

public class SO72918446 {
    public static void main(String args[]) {
        Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-zA-Z]).{2,}$");
        List<String> list = Arrays.asList("ABC","123ABC","def","def45","2GHI","u3ht","zxy","t12pp", "kkk");
        List<String> alphanNist = list.stream().filter(s->pattern.matcher(s).matches()).collect(Collectors.toList()); 
        System.out.println(alphanNist);
    }
}

打印

如果您想知道该图案的含义,您可以参考 regexr.com/6pdb2

[123ABC, def45, 2GHI, u3ht, t12pp]

但是,正如评论所说,如果您也想匹配 ABC,则必须对正则表达式进行一些修改 [(?:\s*[a-zA-Z0-9]{2,}\s*)*] 会在那里工作!

© www.soinside.com 2019 - 2024. All rights reserved.