复杂的if()或enum?

ara*_*hak 5 java enums

在我的应用程序中,如果输入匹配某些特定的20个条目,我需要分支.

我想过使用枚举

public enum dateRule { is_on, is_not_on, is_before,...}
Run Code Online (Sandbox Code Playgroud)

并打开枚举常量来执行一个函数

switch(dateRule.valueOf(input))
{
  case is_on : 
  case is_not_on :
  case is_before :
  .
  .
  .
  // function()
  break;
}
Run Code Online (Sandbox Code Playgroud)

但是输入字符串将像'is on','is not on','is before'等,而不是_之间的_.我了解到枚举不能包含包含空格的常量.

可能的方法我可以说出来:

1,使用if语句比较给出long if语句的20个可能输入

if(input.equals("is on") ||
   input.equals("is not on") || 
   input.equals("is before") ...)   { // function() }
Run Code Online (Sandbox Code Playgroud)

2,处理输入以在单词之间插入_,但即使是不属于此20的其他输入字符串也可以有多个单词.

有没有更好的方法来实现这个?

ara*_*hak 0

感谢您的建议。他们引导我来到这里。

这与其他答案几乎相同,只是有点简化。

总而言之,我需要将输入字符串与一组 20 个字符串进行比较,

如果它们匹配,就做某事。否则,做点别的事吧。

需要与输​​入进行比较的静态字符串集:is on、is not on、is before、is after 等 20 个条目

我创建了一个枚举

public enum dateRules
{
   is_on
   ,is_not_on
   ,is_before
   ,is_after
   .
   .
   .
}
Run Code Online (Sandbox Code Playgroud)

并打开输入的格式化值

if(isARule(in = input.replace(" ","_"))
{
   switch(dateRule.valueOf(in))
   {
      case is_on,
      case is_not_on,
      case is_before, ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我将“input”的格式化值复制到“in”,以便可以重复使用输入,而无需再次将“_”替换为“”。

private static boolean isARule(String value)
  {
    for(dateRule rule : dateRule.values())
    {
      if(rule.toString().equals(value))
      {
        return true;
      }
    }
    return false;
  }
Run Code Online (Sandbox Code Playgroud)

问题解决了。

参考:https ://stackoverflow.com/a/4936895/1297564