java 正则 重复数字_正则表达式-捕获重复的数字(不是数字) - java

我正在尝试用Java编写一种方法来检查字符串,并允许它仅包含数字和逗号。此外,不能有重复数字。

例如:

11,22,33-没关系

22,22,33-这不行

我已经使用正则表达式和Set(如下)的组合来完成了它的初稿,但是正在寻找更好的方法,最好仅使用正则表达式。

public boolean isStringOk(String codes) {

if(codes.matches("^[0-9,]+$")){

Set nonRepeatingCodes = new LinkedHashSet();

for(String c: codigoRoletas.split(",")){

if(nonRepeatingCodes.contains(c)){

return false;

}

else{

nonRepeatingCodes.add(c);

}

}

return true;

}

return false;

}

有人知道仅使用正则表达式是否有可能吗?

参考方案

我怀疑这样做是否明智(正如Jarrod Roberson所述),因为您项目中的任何其他编码人员都很难理解。但是,仅使用正则表达式绝对有可能:

^(?:(\d+)(?!.*,\1(?!\d)),)*\d+$

双重负向的前瞻使其难以理解。但这是一个解释:

^ # anchor the regex to the beginning of the string

(?: # subpattern that matches all numbers, but the last one and all commas

(\d+) # capturing group \1, a full number

(?! # negative lookahead, that asserts that this number does not occur again

.* # consume as much as you want, to look through the whole string

, # match a comma

\1 # match the number we have already found

(?!\d) # make sure that the number has ended (so we don't get false negatives)

) # end of lookahead

, # match the comma

)* # end of subpattern, repeat 0 or more times

\d+ # match the last number

$ # anchor the regex to the beginning of the string

请注意,这里只是通用的正则表达式,而不是特定于Java的。在Java中,您需要转义每个反斜杠,否则它将无法通过正则表达式引擎:

^(?:(\\d+)(?!.*,\\1(?!\\d)),)*\\d+$

正则表达式-集团价值替代 - java

我不确定是否可以这样做,但是一旦完成匹配,我需要一种方法来用在运行时动态声明的字符串替换我的regex表达式中指定的编号组的值。举一个简单的例子,类似...(/)?([A-Za-z0-9])?(/)?$ 我希望能够为第2组插入替换项。我目前正在使用Java的Matcher类。 参考方案 是的,那是可行的。查看我对this question的回答,以了解如何。…Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…java split regex-字符的任意组合 - java

我正在使用3个字符分割字符串:空格,破折号和逗号我想要的是能够使用这3个字符的任意组合进行拆分,例如:-,(破折号后跟逗号)或,--(逗号后加2破折号)或- , -(破折号,逗号间隔破折号)等 String address = "Sector -18B, Dwarka"; String[] addressParts = address.s…java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值