Java 对于每个输入,无论是正确的还是错误的,此代码的答案都是错误的

Java 对于每个输入,无论是正确的还是错误的,此代码的答案都是错误的,java,regex,Java,Regex,我希望正则表达式输出false表示错误输入,true表示正确输入,但只有false显示在输出上。这是Java正则表达式的程序“创建一个接受10位数字字符的正则表达式” 仅以7、8或9开头” 这是JDK1.8.0的代码 public static void main(String args[]) { String st=""; Scanner sc=new Scanner(System.in); st=sc.nextLine(); boolean result=Pa

我希望正则表达式输出false表示错误输入,true表示正确输入,但只有false显示在输出上。这是Java正则表达式的程序“创建一个接受10位数字字符的正则表达式” 仅以7、8或9开头”

这是JDK1.8.0的代码

public static void main(String args[])
{
    String st="";
    Scanner sc=new Scanner(System.in);
    st=sc.nextLine();
    boolean result=Pattern.matches("[7,8,9]{1}[0-9]{9}","st");
    System.out.println(result);
}

您总是与字符串文字st进行比较,而不是与所读行的引用进行比较

而不是
boolean result=Pattern.matches(“[7,8,9]{1}[0-9]{9}”,“st”)

使用
boolean result=Pattern.matches(“[789][0-9]{9}”,st)

您总是与字符串文字st进行比较,而不是与您读取的行进行比较

而不是
boolean result=Pattern.matches(“[7,8,9]{1}[0-9]{9}”,“st”)

使用
boolean result=Pattern.matches(“[789][0-9]{9}”,st)

当前使用的是在字符串中搜索模式,该字符串的值为
“st”
,而不是局部变量的值
st

更改您的线路:

boolean result = Pattern.matches("[789]{1}[0-9]{9}",st);

当前使用的是字符串中的搜索模式,该字符串的值为
“st”
,而不是局部变量的值
st

更改您的线路:

boolean result = Pattern.matches("[789]{1}[0-9]{9}",st);

这些表达方式也适用于:

boolean result = Pattern.matches("[7-9][0-9]{9}", st);

另外,如果我们加上“^”和$anchors,也可以:

^[789][0-9]{9}$
^[789]\d{9}$

这些表达方式也适用于:

boolean result = Pattern.matches("[7-9][0-9]{9}", st);

另外,如果我们加上“^”和$anchors,也可以:

^[789][0-9]{9}$
^[789]\d{9}$

你的意思是没有引号的st
Pattern.matches(“[789]{1}[0-9]{9}”,st)
您可以将其缩短为
[789][0-9]{9}
您不需要在字符类中添加逗号,否则它将被逐字匹配。在删除st上的qoutes后,输出就来了。您能告诉我为什么st上不需要qoutes,但这是regex的重要语法吗?好的。获取用户输入并用变量“st”指向它的目的是什么?在下一行中,您使用的是字符串文字而不是变量?如果答案有帮助,您可以向上投票。祝你好运!你的意思是没有引号的st
Pattern.matches(“[789]{1}[0-9]{9}”,st)
您可以将其缩短为
[789][0-9]{9}
您不需要在字符类中添加逗号,否则它将被逐字匹配。在删除st上的qoutes后,输出就来了。您能告诉我为什么st上不需要qoutes,但这是regex的重要语法吗?好的。获取用户输入并用变量“st”指向它的目的是什么?在下一行中,您使用的是字符串文字而不是变量?如果答案有帮助,您可以向上投票。祝你好运!