我遇到的问题是当我检查字符串是否包含任何字符时,它只查看第一个字符而不是整个字符串。例如,我希望能够输入“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”才能继续该程序。
如果有人可以向我解释这对我有用的那么好
答案 0 :(得分:5)
您的regex
和if 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(),“尝试将整个区域与模式匹配。”