【问题标题】:Check if a string consists of exactly 5 digits in Java [closed]检查一个字符串是否由Java中的5位数字组成[关闭]
【发布时间】:2014-05-30 09:40:29
【问题描述】:

在 Java 应用程序中,我需要检查给定的字符串是否

  • 仅包含数字 0-9 和
  • 正好是五位数

我的第一次尝试是这样的:

public static void main(String[] args) {

    String testString = "000000";
    String myPattern = "\\d{5}";

    Pattern validCharacterPattern = Pattern.compile(myPattern);
    Matcher matcher = validCharacterPattern.matcher(testString);
    boolean b = matcher.find();

    if (b) System.out.println("Valid");
    else System.out.println("Invalid");

}

但是,上面的表达式也适用于例如123456。我需要改变什么?

【问题讨论】:

  • "但是上面的表达式也适用于例如123456" 似乎不正确。 "123456".matches("\\d{5}")false 返回给我。
  • 我为 123456 测试了上面的表达式,只是为了确定。这不是真的。这个问题是错误的,这个页面上的每个答案都是错误的。
  • @Robert 如果您能阅读每个人都在说的内容并发布编辑或删除问题,那就太好了(并且会阻止您的问题被关闭)。
  • 有趣的是,您当前版本的问题的答案是以前的版本:)
  • 当人们发布与实际导致问题的代码不同的代码问题时,我真的很烦。 “在我没有发布的代码中告诉我我做错了什么。”

标签: java regex


【解决方案1】:

为了完整起见(即使问题已经完全改变)

boolean b = matcher.find();

如果正则表达式包含在匹配字符串的某处,这将匹配。如果您使用matcher.matches,您将获得预期的行为,它必须与整个字符串匹配。

或者,您可以完全跳过编译步骤(如果要多次使用此正则表达式,则不推荐。)并直接编写:

String regex = "\\d{5}";
String test = "123456";
if(test.matches(regex)){ ... };

这基本上就是您在原始问题中的内容。

【讨论】:

  • 很抱歉造成了这么多的混乱。这个答案几乎可以做到。
  • @Robert 在自己尝试之前不要问任何问题。请...
  • 我喜欢将这些类型的问题称为“第六感”问题,只有在所有答案发布后才会完全改变。明白我的意思吗?
【解决方案2】:

你错了

但是上面的表达式也适用于例如123456. 我需要改变什么?

false 对应 123456


示例代码:

    String s = "123456";
    String regex = "\\d{5}";
    if (s.matches(regex))
        System.out.println("found");
    else
        System.out.println("not found");

输出

not found

问题已被编辑。现在尝试在正则表达式中使用 start 和 end。

    String testString = "000000";
    String myPattern = "^(\\d{5})$";

    Pattern validCharacterPattern = Pattern.compile(myPattern);
    Matcher matcher = validCharacterPattern.matcher(testString);
    boolean b = matcher.find();

    if (b)
        System.out.println("Valid");
    else
        System.out.println("Invalid");

输出:

Invalid

【讨论】:

  • 这个正则表达式的意思与"\\d{5}" 完全相同,所以这不是解决方案。
  • 好的,我们总是给出提示。对于像你这样聪明的人来说,提示就足够了。
  • 好吧,我试了一下,结果确实是not found。但是,如果您尝试使用"\\d{5}",结果也是not found。看起来原来的提问者有问题。
  • 好吧,正如我们所见,对于 123456,表达式为真。问题的原始提问者是错误的。
  • @Cruncher 我不想再讨论这个问题。我觉得够了。 :)
猜你喜欢
  • 2012-10-21
  • 2021-10-04
  • 2012-03-13
  • 1970-01-01
  • 2012-08-16
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多