简体   繁体   English

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

[英]String length and character validation using Java 8 stream API

Find if an input String is valid - the criteria is String length greater than 5 and characters must be az, AZ or 0-9 . 查找输入的字符串是否有效-条件是字符串length大于5,字符必须为az, AZ or 0-9

Valid strings: aA12Z22 , qwerty , ABCDEF0 有效字符串: aA12Z22qwertyABCDEF0

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

I am trying to get it right using Java 8 streams . 我正在尝试使用Java 8 streams来使其正确。 I have a solution here. 我在这里有一个解决方案。 The question - is there a better way of doing this (using 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);

Personally, I'd use regex: 就个人而言,我将使用正则表达式:

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

But if you're going to use streams, I'd do it like this: 但是,如果您要使用流,我会这样做:

boolean valid =
    s.length() >= 5 &&
    s.chars().allMatch(Character::isLetterOrDigit);

Noting that Character.isLetterOrDigit may match more characters than you want (eg १२३ ). 注意到Character.isLetterOrDigit比你想要的(例如,可以匹配更多的字符१२३ )。 You could additionally check that c < 128 . 您还可以检查c < 128

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM