【问题标题】:Java comparing string to regex - while loopJava将字符串与正则表达式进行比较-while循环
【发布时间】:2013-12-16 18:58:05
【问题描述】:

我希望用户输入一个字符串,如果该字符串与我的正则表达式不匹配,那么我希望输出一条消息并让用户再次输入一个值。

问题是即使字符串与正则表达式匹配,它也会将其视为不匹配。

我的正则表达式: 这应该等于 - Name, Name

[[A-Z][a-zA-Z]*,\s[A-Z][a-zA-Z]*]

我的while 循环:

  System.out.println("Enter the student's name in the following format - surname, forename: ");  studentName = input.next();
  while (!studentName.equals("[[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*]")) {
    System.out.println("try again");
    studentName = input.next();
  }

【问题讨论】:

    标签: java regex while-loop java.util.scanner


    【解决方案1】:

    equals 方法检查字符串等价,而不是匹配正则表达式。

    只需将equals 替换为matches。您还应该删除外部方括号。

    【讨论】:

    • 当我这样做时,它匹配错误的方式。即,如果它是我想要的格式,它会报告错误。如果我删除前面的! !studentName.equals 它会在匹配正则表达式时报告错误
    • 我有while (!studentName.matches("[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*")),但是当我尝试Name, Name 时,它会打印两次Try Again
    • 可能Name, Name 用于分隔输入中的字符串。尝试在您打印的消息中添加错误的输入。
    • 看来你是对的,它正在打印Name, try again Name try again 我该如何解决这个问题?
    • Scanner javadoc 说:A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace
    【解决方案2】:

    会不会是你的正则表达式错误?

    test.matches("[A-Z][a-zA-Z]*,\\s[A-Z][a-zA-Z]*")
    

    对我来说很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多