Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发生检查的正则表达式问题:_Java_Regex - Fatal编程技术网

Java 发生检查的正则表达式问题:

Java 发生检查的正则表达式问题:,java,regex,Java,Regex,检查一个数字n是否出现n次,以及该数字是否在字符串中连续出现 例如: 字符串x=“33322” 案例1:如果int N=3 检查“33322”中3是否连续出现3次 这里3在“33322”中连续出现3次。因此,我们回归真实 情况2:如果int N=2 检查“33322”中2是否连续出现2次 这里2在“33322”中连续出现2次。因此,我们回归真实 我尝试过各种正则表达式,但可能是因为不够彻底,我不清楚什么表达式可以帮助我完成这项任务。我尝试了给定的正则表达式模式 :“^[“+N+”]{“+(N-1

检查一个数字n是否出现n次,以及该数字是否在字符串中连续出现

例如: 字符串x=“33322” 案例1:如果int N=3

检查“33322”中3是否连续出现3次

这里3在“33322”中连续出现3次。因此,我们回归真实

情况2:如果int N=2

检查“33322”中2是否连续出现2次

这里2在“33322”中连续出现2次。因此,我们回归真实

我尝试过各种正则表达式,但可能是因为不够彻底,我不清楚什么表达式可以帮助我完成这项任务。我尝试了给定的正则表达式模式 :“^[“+N+”]{“+(N-1)+”}(“+N+”)$”

但是对于这一点,输出是假的,而它应该是真的,因为您可以看到数字3在上面的示例中明显出现了3次

这里我要寻找一个正则表达式,它可以匹配N的所有可能值

N可以是2-500

当使用
字符串
类的
匹配
方法时,使用正则表达式
*(N){N}.*
,或者当使用
匹配器的
查找
方法时,使用
正则表达式。N是您要查找的号码

编辑:添加了一个Java示例:

public static void main(String[] args) {
    String s = "abc10101010101010101010xyz";
    System.out.println(checkOccurrence(s, 10)); // true
    s = "abc33322xyz";
    System.out.println(checkOccurrence(s, 3)); // true
    System.out.println(checkOccurrence(s, 2)); // true
}

private static boolean checkOccurrence(String text, int number) {
    Pattern p = Pattern.compile("(" + number + "){" + number + "}");
    Matcher m = p.matcher(text);
    return m.find();
}

为什么不使用
“(“+N+”){“+N+”}”
?如果在第一个场景中使用3333,那么它是正好3次还是至少3次呢?@JoakimDanielson应该是真的,因为它是连续的3次。@JoakimDanielson这对N>=10不起作用,因为需要在数字周围加括号。如果不想使用正则表达式:
System.out.println(x.contains(String.join(“),Collections.nCopies(n,String.valueOf(n”“)))
否则可以使用:
System.out.println(x.matches(“.*”(“+n+”){“+n+”}.*)。任何以任何字符开头的字符串,连续包含n倍的数字n,然后以任何字符结尾,不是吗?@JoakimDanielson不管匹配多少。使用
matches()
时,此正则表达式有效。如果使用
find()
,则这两个
*
是冗余的。由于问题没有指定是使用
matches()
还是
find()
,所以这个答案是有效的,但我宁愿给出不带
*
的正则表达式,并添加必须使用
find()
+1.如果使用
匹配项
*
是必需的。因为问题是关于使用
int N
,我建议将代码编写为可重用的方法,例如
布尔检查发生(字符串文本,int N){…}
,然后从
main
调用该方法。这样,您将给出完整的解决方案,因为您现在也必须构建问题所需的正则表达式在这种方法中,您可以选择使用
find()
,因此
*
是不必要的,这是我的偏好,但这是您的答案,因此您可以选择,当然,尽管这样做性能会更好(因为它不必检查其余的输入)。;-)@安德烈亚斯:谢谢你的建议。我认为OP自己实现这个方法不会太难,但它确实让答案变得更好。