使用Java 8流API进行字符串长度和字符验证

pra*_*ad_ 0 java validation java-stream

查找输入字符串是否有效 - 条件是字符串length大于5且字符必须是a-z, A-Z or 0-9.

有效的字符串:aA12Z22,qwerty,ABCDEF0

无效:13A,12CrW#,@**=_+

我正在尝试使用它Java 8 streams.我有一个解决方案.问题 - 是否有更好的方法(使用streams)?

boolean valid = Stream.of(string)
    .flatMapToInt(s -> {
        if (s.length() < 5) return IntStream.of(42); // 42 is a '*' char
        else return s.chars();
        })
    .mapToObj(i -> (char) i)
    .allMatch(c -> Character.isLetterOrDigit(c));
System.out.println(valid);
Run Code Online (Sandbox Code Playgroud)

And*_*ner 6

就个人而言,我使用正则表达式:

boolean valid = string.matches("[A-Za-z0-9]{5,}");
Run Code Online (Sandbox Code Playgroud)

但是如果你要使用流,我会这样做:

boolean valid =
    s.length() >= 5 &&
    s.chars().allMatch(Character::isLetterOrDigit);
Run Code Online (Sandbox Code Playgroud)

注意到Character.isLetterOrDigit可能会匹配比您想要的更多的字符(例如???).你还可以检查一下c < 128.