如何更优雅地校验字符串是否为合法布尔值(大小写不敏感)
严格布尔值字符串校验的优化方案咨询
我在用Boolean.parseBoolean转换字符串时发现,这个方法只有输入是true(大小写不敏感)时才返回true,其他值包括null、"hello"等都会返回false,没法满足严格校验的需求。我需要确保输入只能是true或false(大小写不敏感),否则抛出IllegalStateException,于是写了这段代码:
String input = entityDto().constantValues.get("input"); String message = ("Boolean entity contains invalid data: " + input); if (input != null) { if (input.equalsIgnoreCase("true") || input.equalsIgnoreCase("false")) { return Boolean.parseBoolean(input); } } throw new IllegalStateException(message);
现在这个实现看起来能用,但想知道有没有更优的处理方式来完成这种严格的布尔值校验?
优化方案
1. 预定义集合快速匹配
把合法的布尔字符串存入不区分大小写的集合,简化判断逻辑,集合的contains操作效率也更稳定:
private static final Set<String> VALID_BOOLEAN_STRINGS = new HashSet<>(Arrays.asList("true", "false")); public Boolean strictParseBoolean(String input) { String message = "Boolean entity contains invalid data: " + input; if (input == null || !VALID_BOOLEAN_STRINGS.contains(input.toLowerCase())) { throw new IllegalStateException(message); } return Boolean.parseBoolean(input); }
2. 封装工具方法复用
如果多处需要这种校验,把逻辑封装成静态工具类方法,避免重复代码:
public class BooleanUtils { private static final Set<String> VALID_VALUES = Set.of("true", "false"); public static Boolean strictParse(String input) { if (input == null) { throw new IllegalStateException("Boolean entity contains invalid data: null"); } String lowerInput = input.toLowerCase(); if (!VALID_VALUES.contains(lowerInput)) { throw new IllegalStateException("Boolean entity contains invalid data: " + input); } return Boolean.parseBoolean(lowerInput); } }
调用时直接用BooleanUtils.strictParse(input)即可。
3. 正则表达式匹配
用正则一次性校验是否符合大小写不敏感的true/false,适合偏好正则风格的场景:
public Boolean strictParseBoolean(String input) { String message = "Boolean entity contains invalid data: " + input; if (input == null || !input.matches("(?i)true|false")) { throw new IllegalStateException(message); } return Boolean.parseBoolean(input); }
(?i)表示开启不区分大小写模式,可匹配True、FALSE等任意大小写组合。
4. 线性逻辑简化代码
先处理空值抛出异常,再校验非空输入的合法性,让代码逻辑更直观:
String input = entityDto().constantValues.get("input"); if (input == null) { throw new IllegalStateException("Boolean entity contains invalid data: null"); } String lowerInput = input.toLowerCase(); if (!"true".equals(lowerInput) && !"false".equals(lowerInput)) { throw new IllegalStateException("Boolean entity contains invalid data: " + input); } return Boolean.parseBoolean(lowerInput);
这些方案核心都是在Boolean.parseBoolean转换前,先严格校验输入是否属于合法范围,规避原方法宽松返回false的问题。
内容的提问来源于stack exchange,提问作者user23350531
相关产品推荐
相关产品推荐

