【问题标题】:Using regex for switch-statement in Java在 Java 中使用正则表达式进行 switch 语句
【发布时间】:2011-11-11 00:41:49
【问题描述】:
void menu() {
    print();
    Scanner input = new Scanner( System.in );
    while(true) {
        String s = input.next();
        switch (s) {
        case "m": print(); continue;
        case "s": stat(); break;
        case "[A-Z]{1}[a-z]{2}\\d{1,}": filminfo( s ); break;
        case "Jur1": filminfo(s); break; //For debugging - this worked fine
        case "q": ; return;
        }
    }
}

似乎我的正则表达式已关闭,或者我没有在案例陈述中正确使用它。我想要的是一个字符串: 以一个大写字母开头,后跟两个小写字母,后跟至少一个数字。

我检查了正则表达式 API 并尝试了三种变体(贪婪、不情愿和所有格量词),但不知道它们的正确用途。还检查了 String 的方法,但没有找到与我的需求相关的方法。

【问题讨论】:

  • 这是 Java 7 中的新功能吗?用正则表达式切换。在 Java 6 或更低版本中没有这样的东西。
  • 6及以下甚至没有字符串开关(只有积分和枚举)
  • 是的 - 我怀疑这违反了 switch 规则。那么,到好 'ol if/else if-statements then?
  • 伙计,我喜欢这个网站!谢谢。

标签: java regex switch-statement


【解决方案1】:

您不能将正则表达式用作 switch case。 (想一想:Java 怎么知道你是要匹配字符串 "[A-Z]{1}[a-z]{2}\\d{1,}" 还是正则表达式?)

在这种情况下,您可以做的是尝试匹配默认情况下的正则表达式。

    switch (s) {
        case "m": print(); continue;
        case "s": stat(); break;
        case "q": return;
        default:
            if (s.matches("[A-Z]{1}[a-z]{2}\\d{1,}")) {
                filminfo( s );
            }
            break;
    }

(顺便说一句,这只适用于 Java 7 及更高版本。在此之前没有切换字符串。)

【讨论】:

  • 处理案件的好方法:)
【解决方案2】:

我认为您不能在 switch 案例中使用正则表达式。

switch表达式中的String与表达式进行比较 与每个案例标签相关联,就好像 String.equals 方法是 正在使用。

请参阅http://download.oracle.com/javase/7/docs/technotes/guides/language/strings-switch.html 了解更多信息。

【讨论】:

  • 感谢您加深了我对 switch 语句的理解。
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多