Java入门:如何实现用户输入校验时忽略大小写匹配
大小写不敏感物种匹配实现方案
你不需要完全修改现有方法逻辑,所有调整都可以在你给出的代码块内完成。
原有代码里Arrays.asList(validSpecies).contains(species)默认调用String类的equals()方法做匹配,是严格大小写敏感的,所以只有用户输入和数组里的字符串大小写完全一致时才会判定合法。你已知的equalsIgnoreCase()是正确的实现方式,只需要把原来的contains判断替换成遍历匹配的逻辑即可。
方案1:最小改动版本(推荐,代码改动量最小)
直接替换原有isValid赋值的那行逻辑,遍历合法物种数组时,逐个和用户输入做忽略大小写的相等判断:
import java.util.Arrays; // 其他原有代码保持不变 String[] validSpecies = { "Capuchin", "Guenon", "Macaque", "Marmoset"}; boolean isValid; System.out.println("Enter monkey's species: "); String species = scanner.nextLine(); // 替换原有的contains逻辑 isValid = Arrays.stream(validSpecies) .anyMatch(validItem -> validItem.equalsIgnoreCase(species)); if (!isValid) { System.out.println("This species is not permitted"); return; }
这个实现的逻辑是:只要合法列表里有任意一个值和用户输入通过equalsIgnoreCase比对为true,就判定输入合法。不管用户输入全小写capuchin、全大写CAPUCHIN还是大小写混写CaPuChIn,都能正常匹配通过。
方案2:统一大小写匹配版本(适合后续有更多匹配规则的场景)
如果后续你还要加其他输入校验逻辑,可以把合法值和用户输入统一转为全小写(或全大写)之后再做匹配,避免后续重复写忽略大小写的判断:
import java.util.Arrays; import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; // 其他原有代码保持不变 String[] validSpecies = { "Capuchin", "Guenon", "Macaque", "Marmoset"}; boolean isValid; System.out.println("Enter monkey's species: "); // 顺手处理用户不小心输入的首尾空格,统一转小写避免大小写问题 String species = scanner.nextLine().trim().toLowerCase(Locale.ROOT); // 预先生成全小写的合法值集合 Set<String> validSet = Arrays.stream(validSpecies) .map(item -> item.toLowerCase(Locale.ROOT)) .collect(Collectors.toSet()); isValid = validSet.contains(species); if (!isValid) { System.out.println("This species is not permitted"); return; }
注意:转大小写时指定
Locale.ROOT是为了避免特殊语言区域的大小写转换异常,比如土耳其语环境下字母i的大小写转换规则和英语不同,会导致匹配失效。如果你的合法物种列表是固定不变的,也可以直接把数组里的字符串全写成小写,省掉运行时转换的步骤。
内容的提问来源于stack exchange,提问作者user18942073
相关产品推荐
相关产品推荐

