查找输入字符串是否有效 - 条件是字符串
length
大于5且字符必须是a-z, A-Z or 0-9
。使用Java 8流的字符串长度和字符验证API有效的字符串:
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);
为什么不使用正则表达式:'string.matches(“[A-Za-z0-9] {5,}”)'?流看起来没有必要,困难而且效率低下。 –
你能解释你为什么要用stream api来做它吗?它与正则表达式相比有什么好处? –