You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用HashSet检查多个字符串长度?优化输入校验方案

这问题我之前也碰到过,一堆嵌套的if-else确实看着闹心,给你几个更优雅的方案,既能解决校验问题,代码还清爽:

方案一:用Stream API批量校验(最简洁)

先别着急把字符串塞HashSet,先把所有输入收集到数组里,用Java 8+的Stream快速判断有没有不符合规则的内容:

// 把六个文本框的输入统一收集到数组
String[] inputs = {
    jtfFirstWord.getText(),
    jtfSecondWord.getText(),
    jtfThirdWord.getText(),
    jtfFourthWord.getText(),
    jtfFifthWord.getText(),
    jtfSixthWord.getText()
};

// 定义允许的长度集合,比写一堆==直观多了
Set<Integer> allowedLengths = Set.of(7, 9, 11);

// 检查是否存在长度不符合的字符串,找到一个就停止遍历
boolean hasInvalidInput = Arrays.stream(inputs)
    .anyMatch(str -> !allowedLengths.contains(str.length()));

if (hasInvalidInput) {
    JOptionPane.showMessageDialog(null, "只能输入7、9或11个字符的单词");
} else {
    // 校验通过后,再存入HashSet
    Set<String> accept = new HashSet<>(Arrays.asList(inputs));
    // 这里写后续业务逻辑
}
方案二:提取校验工具方法(复用性拉满)

如果以后其他地方也要用到类似的长度校验,把校验逻辑单独封装成方法,代码可读性和维护性都会更好:

// 单独封装的校验方法,一目了然
private static boolean isLengthValid(String str) {
    int len = str.length();
    return len == 7 || len == 9 || len == 11;
}

// 调用的时候就很简洁
String[] inputs = { /* 六个输入字符串 */ };
boolean hasInvalidInput = Arrays.stream(inputs).anyMatch(str -> !isLengthValid(str));

if (hasInvalidInput) {
    JOptionPane.showMessageDialog(null, "只能输入7、9或11个字符的单词");
} else {
    Set<String> accept = new HashSet<>(Arrays.asList(inputs));
    // 后续逻辑
}
关于用HashSet校验的小提醒

你之前直接把六个字符串塞进HashSet,但要注意:HashSet会自动去重,如果两个输入框内容重复,HashSet里只会留一份。但输入校验是要针对每个文本框的内容的——哪怕两个输入重复,只要长度不符合,都得提示用户。所以一定要先做校验,通过之后再存HashSet,别用HashSet来做校验。如果确实只关心去重后的内容是否合法,那可以这么遍历HashSet:

Set<String> accept = new HashSet<>(Arrays.asList(inputs));
Set<Integer> allowedLengths = Set.of(7,9,11);
boolean hasInvalid = accept.stream().anyMatch(str -> !allowedLengths.contains(str.length()));

但这种场景很少,还是推荐先校验再存集合的方式。

内容的提问来源于stack exchange,提问作者user7596556

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:19