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)
就个人而言,我使用正则表达式:
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.