我想知道是否有办法检查字符串是否有效。我需要允许用户输入多个“-m(数字)”,如下所示:
-m 5 -m444 -m 33
请注意,只要模式连续为-m(数字),空格就无关紧要。
我目前正在使用for循环逐个字符进行检查,但发现它很乏味。有没有办法简单地使用模式匹配来进行,而无需逐个字符地手动检查?
修改:-m 5 -m444 -m 33 344
应该无效,因为后面的344应该是-m 344
或-m344
答案 0 :(得分:2)
这样做的好方法是使用Java正则表达式。您可以使用以下示例来验证代码:
String str = "-m 5 -m444 -m 33";
str.matches("(-m\\s?\\d+)(\\s+(-m\\s?\\d+))*") //returns true
要获得正则表达式的细分,请参阅以下链接:regex101
基本上,第一部分(-m\s?\d+)
匹配一个" -m",零或一个空格字符,然后是一个或多个十进制字符。 Rest匹配相同的模式,零到多次,中间有空格。
也有更好的方法来做同样的正则表达式,但我的正则表达式并不完全达到那个级别。也许其他人可以提供更多的DRY解决方案,但我认为对于这样一个简单的案例来说绰绰有余:)
答案 1 :(得分:1)
答案 2 :(得分:1)
我的事-m\s*[0-9]+
可能会做你想要的。
请注意,在java REGEX中,您需要转义\:-m\\s*(?<number>[0-9]+)
private static final Pattern PATTERN = Pattern.compile("-m\\s*(?<number>[0-9]+)");
public static void main(String[] args) {
String test = "-m 5 -m444 -m 33 ";
Matcher matcher = PATTERN.matcher(test);
while(matcher.find()){
System.out.println(matcher.group("number"));
}
}
返回:
5
444
33
编辑:如果你不关心解析,你可以使用以下内容:
private static final Pattern PATTERN_VALIDATION = Pattern.compile("(\\s*-m\\s*[0-9]+\\s*)+");
public static void main(String[] args) {
String test = "-m 5 -m444 -m 33 ";
Matcher matcher = PATTERN_VALIDATION.matcher(test);
System.out.println(matcher.matches());
}
将打印true
。
检查-m 5 -m444 -m 33 344
时会显示错误。