我需要编写一些代码来检查输入的长度及其开头。根据这两个参数,我必须修改我的输入。我成功地检查了输入的长度。但是当我尝试检查输入的开头时,我很挣扎。
我到目前为止:
Long number = ean12;
String inputEan12 = Long.toString(ean12);
if (inputEan12.length() == 12) {
if (inputEan12.startsWith("02"||"21"||"22"||"23"||"24"||"25"||"26"||"27"||"28"||"29")
//SOME CODE
} else {
//SOME OTHER CODE
}
} else if (inputEan12.length() == 11) {
//SOME MORE CODE
} else {
System.out.println("All is good!");
}
我选择使用" .startsWith()"做我检查的方法,认为它可以轻松解决我的问题。但我一次只能做一次检查。似乎我需要添加一个" if"对于我要检查的每个开头/数字。它会变成一头大白象......
所以我考虑使用一个表(例如:" String [] myTable")来放入我所有的"开始变量"并在该表上循环。但是这个startsWith()方法并不允许我这样做。看起来我的前缀必须简单。
任何解决方案或建议让我轻松检查输入的开头?
答案 0 :(得分:2)
在这里,希望它是您正在寻找的:
List<String> possibleValues = Arrays.asList("02", "21", "22", "23", "24", "25", "26", "27", "28", "29");
if (possibleValues.contains(inputEan12.substring(0, 2))) {
//SOME CODE
}
答案 1 :(得分:1)
如果您愿意使用外部图书馆,那么Commons Lang StringUtils.startsWithAny将会有效:
if (StringUtils.startsWithAny(inputEan12, "02", "21", "22", etc...)
{
// do stuff
}
答案 2 :(得分:0)
使用正则表达式。
// either "02" or "2 and any number between 1 and 9"
Pattern p = Pattern.compile("(02|2[1-9]).*");
if (inputEan12.length() == 12) {
if (p.matcher(inputEan).matches()) {
// code
}
}
答案 3 :(得分:0)
您可以像这样使用.matches(String regex)
:
if (inputEan12.matches("^(02|21|22|23|24|25|26|27|28|29).*$"){ }
答案 4 :(得分:0)
与or
没有startsWith
短语法。您可以使用String.startsWith
分隔的||
多次调用(这在逻辑上就是您所写的内容)。但是,采用一系列有效前缀和您关心的inputEan12
子字符串并将anyMatch
与Arrays.stream
一起使用会更短。像,
Long number = ean12;
String inputEan12 = Long.toString(ean12);
String[] prefixes = { "02", "21", "22", "23", "24", "25", "26", "27", "28", "29" };
if (inputEan12.length() == 12) {
String firstTwo = inputEan12.substring(0, 2);
if (Arrays.stream(prefixes).anyMatch(firstTwo::equals)) {
// SOME CODE
} else {
// SOME OTHER CODE
}
} else if (inputEan12.length() == 11) {
// SOME MORE CODE
} else {
System.out.println("All is good!");
}
答案 5 :(得分:0)
或者简单地迭代:
public static void main(final String[] args) {
String inputEan12 = "ean12";
if (inputEan12.length() == 12) {
if (startsWith(inputEan12, "02", "21", "22", "23", "24", "25", "26", "27", "28", "29")) {
//SOME CODE
} else {
//SOME OTHER CODE
}
}
}
private static boolean startsWith(final String string, final String... possibilities) {
for (String prefix : possibilities) {
if (string.startsWith(prefix)) {
return true;
}
}
return false;
}