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

Java 通过检查字符串的模式来验证字符串,java,Java,我想知道是否有办法检查字符串是否有效。我需要允许用户输入多个-mnumber,如下所示: -m 5 -m444 -m 33 请注意,只要模式连续为-mnumber,空格就无关紧要 我目前正在使用for循环逐个字符进行检查,但发现它很乏味。有没有一种方法可以简单地使用模式匹配而不用逐个字符手动检查 编辑:-m 5-m444-m 33 344 应该无效,因为后面的344应该是-m 344或-m344 String.matches(String regex) 你可以和我一起去 String.ma

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

-m 5 -m444 -m 33 
请注意,只要模式连续为-mnumber,空格就无关紧要

我目前正在使用for循环逐个字符进行检查,但发现它很乏味。有没有一种方法可以简单地使用模式匹配而不用逐个字符手动检查

编辑:-m 5-m444-m 33 344

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

String.matches(String regex)
你可以和我一起去

String.matches(String regex)
我认为-m\s*[0-9]+可能会做你想做的事

注意,在java正则表达式中,需要转义\:-m\\s*?[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"));
    }

}
将打印为真

在检查-m 5-m444-m 33 344时,将打印false。

I thing-m\s*[0-9]+可能会执行您想要的操作

注意,在java正则表达式中,需要转义\:-m\\s*?[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"));
    }

}
将打印为真


检查-m 5-m444-m 33 344时,将打印false。

一个好方法是使用Java正则表达式。您可以使用以下示例验证代码:

String str = "-m 5 -m444 -m 33";
str.matches("(-m\\s?\\d+)(\\s+(-m\\s?\\d+))*") //returns true
要获取正则表达式的详细信息,请参见以下链接:

基本上,第一部分-m\s?\d+匹配一个-m、零或一个空格字符,然后匹配一个或多个十进制字符。Rest匹配相同的模式,零到多次,中间有空格


同样的正则表达式也有一些更奇特的方法,但我的正则表达式fu并不完全处于那个水平。也许其他人可以提供一个更简单的解决方案,但我认为对于这样一个简单的例子来说,这已经足够了:

一个好方法是使用Java正则表达式。您可以使用以下示例验证代码:

String str = "-m 5 -m444 -m 33";
str.matches("(-m\\s?\\d+)(\\s+(-m\\s?\\d+))*") //returns true
要获取正则表达式的详细信息,请参见以下链接:

基本上,第一部分-m\s?\d+匹配一个-m、零或一个空格字符,然后匹配一个或多个十进制字符。Rest匹配相同的模式,零到多次,中间有空格


同样的正则表达式也有一些更奇特的方法,但我的正则表达式fu并不完全处于那个水平。也许其他人可以提供一个更简单的解决方案,但我认为对于这样一个简单的案例来说,这就足够了:

太棒了,但很抱歉,我在问题中遗漏了一些东西。如果用户密钥-m 5-m444-m 33 344怎么办?在这种情况下,后面的344无效,因为它应该是-m 344或-M344。您可以自由测试我的第二个代码块,并亲自查看-m 5-m444-m 33 344是否将打印为false。如果你使用我的第一个模式,你将只捕获5444和33,但不会抛出错误。太棒了,但很抱歉,我的问题遗漏了一些东西。如果用户密钥-m 5-m444-m 33 344怎么办?在这种情况下,后面的344无效,因为它应该是-m 344或-M344。您可以自由测试我的第二个代码块,并亲自查看-m 5-m444-m 33 344是否将打印为false。如果您使用我的第一个模式,您将只捕获5444和33,但不会抛出错误。