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

Java中如何循环直到输入合法的switch case字符串?

嘿,这个场景我太熟悉了——当合法输入选项一多,写一堆||不仅代码丑,后期维护也麻烦。给你两个简洁又好用的Java实现方案:

方案1:用集合(Set)存储合法值(最通用)

这种方法适合合法值数量多、可能动态调整的场景,利用Set的contains()方法快速判断输入是否合法,代码清爽又好维护:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class NameInputChecker {
    public static void main(String[] args) {
        // 把所有合法名称放进Set里,后续加新值直接在这里添加即可
        Set<String> validNames = new HashSet<>(Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve", "Frank"));
        Scanner scanner = new Scanner(System.in);
        String input = "";

        while (true) {
            System.out.print("请输入名称:");
            input = scanner.nextLine().trim(); // 去除前后空格,避免误判

            if (validNames.contains(input)) {
                System.out.println("输入合法!你输入的名称是:" + input);
                break; // 输入正确,退出循环
            } else {
                System.out.println("名称错误,请重新输入!");
            }
        }
        scanner.close();
    }
}

为什么用Set?

  • 判断效率高:HashSet的contains()方法时间复杂度是O(1),不管合法值有多少,判断速度都很快;
  • 维护方便:要新增/删除合法值,只需要修改集合的初始化代码,不用动判断逻辑;
  • 灵活性强:如果合法值是从配置文件、数据库读取的,直接把读取到的数据塞进Set就行,完全不用改判断逻辑。
方案2:用枚举类型(适合固定业务场景)

如果你的合法名称是固定的、有明确业务含义的,用枚举来管理会更规范,还能扩展一些自定义逻辑(比如忽略大小写判断):

import java.util.Scanner;

// 定义枚举,列出所有合法名称
enum ValidUserName {
    ALICE, BOB, CHARLIE, DAVID, EVE;

    // 静态方法:判断输入是否为合法名称(支持忽略大小写)
    public static boolean isLegalName(String input) {
        try {
            // 把输入转成大写,和枚举常量匹配
            ValidUserName.valueOf(input.trim().toUpperCase());
            return true;
        } catch (IllegalArgumentException e) {
            // 匹配失败,说明输入不合法
            return false;
        }
    }
}

public class EnumInputChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = "";

        while (true) {
            System.out.print("请输入名称:");
            input = scanner.nextLine();

            if (ValidUserName.isLegalName(input)) {
                System.out.println("输入合法!你输入的名称是:" + input.trim());
                break;
            } else {
                System.out.println("名称错误,请重新输入!");
            }
        }
        scanner.close();
    }
}

枚举方案的优势:

  • 类型安全:枚举是强类型的,避免了字符串拼写错误的问题;
  • 可扩展性:可以给枚举加方法、属性,比如上面的忽略大小写判断,或者给每个名称加对应的描述;
  • 代码可读性高:合法值都集中在枚举类里,一目了然。

小提示

  • 记得用trim()处理输入:避免用户输入前后空格导致的误判;
  • 如果需要支持大小写不敏感:方案1可以把Set里的元素都存成大写(或小写),输入时转成对应格式再判断;方案2已经做了这个处理;
  • 资源释放:用完Scanner记得调用close(),避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:10:18