[英]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 beaz, AZ or 0-9
.查找输入的字符串是否有效-条件是字符串
length
大于5,字符必须为az, AZ or 0-9
。Valid strings:
aA12Z22
,qwerty
,ABCDEF0
有效字符串:
aA12Z22
,qwerty
,ABCDEF0
Not valid:
13A
,12CrW#
,@**=_+
无效:
13A
,12CrW#
,@**=_+
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.