Java:startsWith()具有不同的前缀而不仅仅是一个

时间:2018-04-17 13:45:43

标签: java startswith

我需要编写一些代码来检查输入的长度及其开头。根据这两个参数,我必须修改我的输入。我成功地检查了输入的长度。但是当我尝试检查输入的开头时,我很挣扎。

我到目前为止:

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()方法并不允许我这样做。看起来我的前缀必须简单。

任何解决方案或建议让我轻松检查输入的开头?

6 个答案:

答案 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子字符串并将anyMatchArrays.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;
}