为什么我的正则表达式不起作用? [Java] [正则表达式] [空格问题]
Why my regex is not working ? [Java] [Regex] [Whitespaceproblem]
我定义了一个正则表达式来接受手机号码。
例如:90 9121312333
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UserRegistrationProblem
{
public static void main(String[] args)
{
System.out.println("Enter Mobile Number");
Scanner sc = new Scanner(System.in);
String mobile = sc.next();
Pattern pattern = Pattern.compile("^[0-9]{2}\s[0-9]{10}$");
Matcher matcher = pattern.matcher(mobile);
if (matcher.matches())
{
System.out.println("Valid Mobile Number");
}
else
{
System.out.println("Invalid Mobile Number");
}
}
}
所以,它不起作用。
空格有问题。
我查找了语法,它是正确的。
sc.next()
正在阅读 "90"
.
要查看它,请在读取数字后添加 System.out.println(">" + mobile + "<");
。
更好的是,至少在出现错误的情况下,向用户展示错误的原因:
System.out.println("Invalid Mobile Number: \"" + mobile + "\"");
这将对用户(最终对开发者有帮助!)
文档:
A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.
next():Finds and returns the next complete token from this scanner.
您可能想使用 nextLine()
读取整个输入
注意:使用 Matcher.matches()
时无需使用 ^
和 $
- 这总是测试完整输入是否与表达式匹配(Matcher.find()
不正确) .
我定义了一个正则表达式来接受手机号码。
例如:90 9121312333
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UserRegistrationProblem
{
public static void main(String[] args)
{
System.out.println("Enter Mobile Number");
Scanner sc = new Scanner(System.in);
String mobile = sc.next();
Pattern pattern = Pattern.compile("^[0-9]{2}\s[0-9]{10}$");
Matcher matcher = pattern.matcher(mobile);
if (matcher.matches())
{
System.out.println("Valid Mobile Number");
}
else
{
System.out.println("Invalid Mobile Number");
}
}
}
所以,它不起作用。
空格有问题。
我查找了语法,它是正确的。
sc.next()
正在阅读 "90"
.
要查看它,请在读取数字后添加 System.out.println(">" + mobile + "<");
。
更好的是,至少在出现错误的情况下,向用户展示错误的原因:
System.out.println("Invalid Mobile Number: \"" + mobile + "\"");
这将对用户(最终对开发者有帮助!)
文档:
A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace.
next():Finds and returns the next complete token from this scanner.
您可能想使用 nextLine()
读取整个输入
注意:使用 Matcher.matches()
时无需使用 ^
和 $
- 这总是测试完整输入是否与表达式匹配(Matcher.find()
不正确) .