Java/Scala正则表达式问题

Java/Scala正则表达式问题,java,regex,scala,Java,Regex,Scala,有没有更好的方法来简化我的以下代码?谢谢 if (n.equals("000000000") || n.equals("1111111111") || n.equals("222222222")|| n.equals("333333333")|| n.equals("444444444")|| n.equals("555555555")|| n.equals("666666666")|| n.equals("777777777")|| n.equals("888888888")|| n.eq

有没有更好的方法来简化我的以下代码?谢谢

 if (n.equals("000000000") || n.equals("1111111111") || n.equals("222222222")|| n.equals("333333333")|| n.equals("444444444")|| n.equals("555555555")|| n.equals("666666666")|| n.equals("777777777")|| n.equals("888888888")||  n.equals("999999999")) {
  // do my function
        }

我想接受所有可能的9位数字字符串,除非所有9位数字都相同

使用以下命令:

^(?!(\\d)(\\1){8})\\d{9}$
因此,您的代码应该是:

val regex = "^(?!(\\d)(\\1){8})\\d{9}$".r
if (regex.findFirstIn(n).isDefined)
    //true
这也应该起作用:

if ( n.matches("^(?!(\\d)(\\1){8})\\d{9}$") )
    //true

在没有正则表达式的情况下执行此操作可能更高效、更可读:

def check(s:String) = s.size == 9 && ('0' to '9').contains(s.head) && s.forall(_ == s.head)

@ check("000000000")
res3: Boolean = true
@
@ check("000000001")
res4: Boolean = false
@
@ check("00000000")
res6: Boolean = false
@
@ check("111111111")
res7: Boolean = true
@
@ check("aaaaaaaaa")
res8: Boolean = false
@
@ check("")
res10: Boolean = false

您的描述与您的注释相矛盾,因此您可能希望反转函数的结果。

您到底想做什么?我想接受所有可能的9位数字符串,但九位数都相同的情况除外。这实际上与您当前代码的作用相反。现在,当字符串是相同数字的9个时,函数将运行。请使用n.matches[0-9]\\1{8}。请参阅@saka1029代码。相反地使用它。如果没有匹配,那么它将是您想要的字符串。谢谢!如果在Java的情况下呢?我需要编译正则表达式模式吗?如果你想多次应用正则表达式,比如循环中的正则表达式,那么编译是必要的/有用的;如果只使用一次,那么就不需要了!第二个示例也在java中工作…我在第二个示例中得到了以下错误:java.util.regex.PatternSyntaxException:索引10^[0-8]?1{8}$附近的内联修饰符未知。您的正则表达式与999999999999不匹配,应该是[0-9]或\\并且为什么匹配8888888而不是999999999?这是一个好方法。喜欢功能性风格。如果你把它限制在数字范围内,那就太好了。无alpha。@Saleem它只接受在“0”到“9”范围内定义的数字。或者我搞错你了?是的。你说得对,只要接受数字就行了。我指的是考试。检查AAAA。。。大多数人都会先看一眼输出,所以当问题问到一件事时会感到困惑,但答案也包括了其他的事情。在现实生活中,你的解决方案是可靠的。