请参阅字符串中包含IT中的任何字符

问题描述 投票:0回答: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”,以便该程序继续。

如果有人可以解释这对我来说是很棒的。
    

您的

regex

java regex string validation character
5个回答
6
投票
是错误的。这样使用:

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

是一个11个字符,其中包含数字
0-9


 +应该在集合之外,或者您可以特异性尝试匹配这样的11位数字: ^ [0-9] {11} $( ^和$锚定在字符串的开始和结尾)。
    

您需要将“+”放在“]”之后。因此,您将其更改为:

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


0
投票
为什么不尝试使用for 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
投票
请您手机号码中的合法字符

0

..

9

+
? 如果是这样,那么您应该使用正则表达式

0
投票
,该表达式

[0-9]+

与零或更多的法律字符匹配。  (如果不是,您可能的意思是。)另外,您可以使用
[0-9+]{11}
而不是明确的检查长度为11.
当前代码失败的原因是
String#matches()
不检查正则表达式是否匹配字符串的
part
,而是它是否匹配字符串的
all
。  您可以在javadoc中看到这一点,该javadoc将您指向
Matcher#matches()

,它“试图将整个区域与模式匹配。”

© www.soinside.com 2019 - 2024. All rights reserved.