【发布时间】:2012-11-12 17:44:33
【问题描述】:
我正在尝试用 Java 编写一个方法来检查字符串并允许它只包含数字和逗号。此外,不能有重复的数字。
例如:
-
11,22,33- 没关系 -
22,22,33- 这不行
我已经使用正则表达式和Set<String>(如下)的组合完成了它的初稿,但正在寻找更好的东西,最好只使用正则表达式。
public boolean isStringOk(String codes) {
if(codes.matches("^[0-9,]+$")){
Set<String> nonRepeatingCodes = new LinkedHashSet<String>();
for(String c: codigoRoletas.split(",")){
if(nonRepeatingCodes.contains(c)){
return false;
}
else{
nonRepeatingCodes.add(c);
}
}
return true;
}
return false;
}
有谁知道这是否可能只使用正则表达式?
【问题讨论】:
-
只使用正则表达式是不可能的。正则表达式不会跟踪所有匹配的实际数字。它只知道
digit匹配。对于几场比赛,你仍然可以做到。但是如果你不知道字符串的长度,那就是i don't know how much complex, even if its possible。 -
使用正则表达式可能是可能的,但对于下一个出现的人来说,这将是完全神秘的。 Jamie Zawinski 之所以对正则表达式发表评论,就是出于这样的原因。
-
值的子范围是否总是相同的长度?例如,
11,22,33表示长度为 2,111,222,333表示长度为 3,等等 -
@RohitJain is 只能使用正则表达式。但我完全同意 Jarrod Roberson 的观点!
-
@m.buettner.. 是的,我看到了你的解决方案,这就是我指出的原因,它可能很复杂,就像你的回答一样。