有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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()”方法进行检查,认为这样可以轻松解决问题。但我一次只能做一张支票。似乎我需要为我想要检查的每个开头/数字添加一个“如果”。它会变成一头大白象

因此,我考虑使用一个表(例如:“String[]myTable”)将所有“开始变量”放入表中,并在该表上循环。但是这个startsWith()方法不允许我这么做。看来我的前缀必须很简单

有什么解决方案或建议可以让我轻松检查输入的开头吗


共 (6) 个答案

  1. # 1 楼答案

    没有像startsWith那样的or短语法。可以使用多个对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!");
    }
    
  2. # 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 
    }
    
  3. # 3 楼答案

    或者简单地迭代:

    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;
    }
    
  4. # 4 楼答案

    如果您愿意使用外部库,那么Commons LangStringUtils.startsWithAny将起到以下作用:

    if (StringUtils.startsWithAny(inputEan12, "02", "21", "22", etc...)
    {
        // do stuff
    }
    
  5. # 5 楼答案

    使用正则表达式

    // 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 
        }
    }
    
  6. # 6 楼答案

    你可以这样使用.matches(String regex)

    if (inputEan12.matches("^(02|21|22|23|24|25|26|27|28|29).*$"){ }