Java中startsWith()多前缀匹配问题:结合输入长度校验需求
解决EAN12前缀校验的问题
嘿,我发现你在EAN12的前缀校验这里卡壳啦!问题出在你对startsWith()方法的用法上——Java里这个方法不能直接用||把多个前缀字符串连在一起,它每次只能接收一个字符串参数哦。
咱们来调整一下代码,给你两种可行的方案:
方案一:多个startsWith()逻辑或判断
这是最直接的修改方式,把每个前缀单独用startsWith()检查,再用||连接判断条件:
Long number = ean12; String inputEan12 = Long.toString(ean12); if (inputEan12.length() == 12) { // 逐个检查前缀,用||连接判断条件 if (inputEan12.startsWith("02") || inputEan12.startsWith("21") || inputEan12.startsWith("22") || inputEan12.startsWith("23") || inputEan12.startsWith("24") || inputEan12.startsWith("25") || inputEan12.startsWith("26") || inputEan12.startsWith("27") || inputEan12.startsWith("28") || inputEan12.startsWith("29")) { // 符合前缀要求的处理逻辑 } } else { // 长度不符合的处理逻辑 }
方案二:用集合存储前缀,更易维护
如果以后需要添加或修改前缀,这种方式会更方便。先把所有有效前缀放进一个集合,再截取输入的前两位判断是否在集合中:
import java.util.Arrays; import java.util.HashSet; import java.util.Set; // ...你的其他代码 Long number = ean12; String inputEan12 = Long.toString(ean12); // 建议把这个集合定义成类常量,避免重复创建 Set<String> validEanPrefixes = new HashSet<>(Arrays.asList("02", "21", "22", "23", "24", "25", "26", "27", "28", "29")); if (inputEan12.length() == 12) { // 截取前两位前缀,检查是否在有效集合中 if (validEanPrefixes.contains(inputEan12.substring(0, 2))) { // 符合前缀要求的处理逻辑 } } else { // 长度不符合的处理逻辑 }
要是你的项目用的是Java 9及以上版本,还可以用更简洁的Set.of()创建不可变集合:
Set<String> validEanPrefixes = Set.of("02", "21", "22", "23", "24", "25", "26", "27", "28", "29");
这样就能正确完成前缀校验啦!
内容的提问来源于stack exchange,提问作者SDJ
相关产品推荐
相关产品推荐

