Java - 查看字符串中是否包含任何字符

时间:2013-11-20 16:48:31

标签: java regex string validation character

我遇到的问题是当我检查字符串是否包含任何字符时,它只查看第一个字符而不是整个字符串。例如,我希望能够输入“123abc”,并且字符被识别,因此失败。我还需要字符串长度为11个字符,因为我的程序只能使用1个字符,所以它不能再进一步了。

到目前为止,这是我的代码:

public static int phoneNumber(int a)
{
   while (invalidinput)
            {
        phoneNumber[a] = myScanner.nextLine();

        if (phoneNumber[a].matches("[0-9+]") && phoneNumber[a].length() == 11 )
        {   
            System.out.println("Continue");
            invalidinput = false;
        }
        else
        {
            System.out.print("Please enter a valid phone number: ");
        }

    }

    return 0;
}

例如,为什么如果我带走检查以查看phoneNumber.length()它仍然只注册1个字符,所以如果我输入“12345”它仍然失败。我只能输入“1”才能继续该程序。

如果有人可以向我解释这对我有用的那么好

5 个答案:

答案 0 :(得分:5)

您的regexif condition错了。像这样使用它:

 if ( phoneNumber[a].matches("^[0-9]{11}$") ) {
    System.out.println("Continue");
    invalidinput = false;
 }

这样只允许phoneNumber[a]为11个字符,只包含数字0-9

答案 1 :(得分:0)

+应该在集合之外,或者您可以专门尝试匹配11个数字,如下所示:^ [0-9] {11} $(^和$锚定匹配到字符串的开头和结尾)

答案 2 :(得分:0)

你需要在你的正则表达式中加上“]”之后的“+”。所以,你会把它改成:

phoneNumber[a].matches("[0-9]+")

答案 3 :(得分:0)

为什么不尝试使用for循环来浏览每个字符?

像:

public static int phoneNumber(int a)
{
   while (invalidinput)
            {

       int x = 0;
       for(int i = 0; i < phoneNumber[a].length(); i++)
       {
        char c = phoneNumber[a].charAt(i);
        if(c.matches("[0-9+]")){
        x++;
       }


}
  if (x == phoneNumber[a].length){
    System.out.println("Continue");
    invalidinput = false;

        }
  else
        {
            System.out.print("Please enter a valid phone number: ");
        }

}
return 0;
}

答案 4 :(得分:0)

您的电话号码0 .. 9+中是否包含合法字符?如果是这样,那么您应该使用正则表达式[0-9+]*,它匹配零个或多个合法字符。 (如果没有,您可能意味着[0-9]+。)此外,您可以使用[0-9+]{11}而不是明确检查长度为11。

您当前代码失败的原因是String#matches()不检查正则表达式是否与字符串的 part 匹配,但它是否与 all 匹配的字符串。您可以在JavaDoc中看到这一点,它指向Matcher#matches(),“尝试将整个区域与模式匹配。”