通过检查字符串模式来验证字符串

时间:2017-02-20 14:09:52

标签: java

我想知道是否有办法检查字符串是否有效。我需要允许用户输入多个“-m(数字)”,如下所示:

-m 5 -m444 -m 33 

请注意,只要模式连续为-m(数字),空格就无关紧要。

我目前正在使用for循环逐个字符进行检查,但发现它很乏味。有没有办法简单地使用模式匹配来进行,而无需逐个字符地手动检查?

修改:-m 5 -m444 -m 33 344

应该无效,因为后面的344应该是-m 344-m344

3 个答案:

答案 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)

你可以选择

String.matches(String regex)

Javadoc

答案 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时会显示错误。