Java - 判断一个字符串中是否包含任何字符

5
我遇到的问题是当我检查字符串是否包含任何字符时,它只查看第一个字符而不是整个字符串。例如,我想输入“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个回答

5
你的正则表达式if条件语句是错误的。请像这样使用它:

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

这将只允许phoneNumber[a]是由数字0-9组成的11个字符长度。


1
Java正则表达式中边界匹配器的进一步阅读:http://docs.oracle.com/javase/tutorial/essential/regex/bounds.html - Klazen108
1
谢谢,这非常有帮助。 - Patch
@Patch:只需点击我的答案左上方的勾号即可。一旦点击,它将变为绿色。 - anubhava
啊,我的错。再次感谢。 - Patch
没问题,祝你有美好的一天。 - anubhava

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;
}

0
"+" 应该在集合外面,或者你可以尝试像这样明确地匹配 11 个数字:^[0-9]{11}$(^ 和 $ 将匹配锚定到字符串的开头和结尾)。

0
你需要在正则表达式中的 "]" 后面加上 "+"。所以,你需要将它改为:
phoneNumber[a].matches("[0-9]+")

0
你的电话号码中合法的字符是0..9+吗?如果是,那么你应该使用正则表达式[0-9+]*,它可以匹配零个或多个合法字符。(如果不是,你可能意思是[0-9]+)。还有,你可以使用[0-9+]{11}代替显式检查长度是否为11。
你当前代码失败的原因是String#matches()不检查正则表达式是否匹配字符串的一部分,而是检查它是否匹配整个字符串。你可以在JavaDoc中看到这一点,它会指向Matcher#matches(),它“尝试将整个区域与模式进行匹配”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接