用于检查 Java 中的变量名以消除许多 IF-ELSE 块的正则表达式

Posted

技术标签:

【中文标题】用于检查 Java 中的变量名以消除许多 IF-ELSE 块的正则表达式【英文标题】:Regex for Checking Variable-Name in Java to eliminate many IF-ELSE Blocks 【发布时间】:2020-03-20 20:48:18 【问题描述】:
enum MYOPTIONS 
   OPTION1,OPTION2,OPTION3 .....OPTION100


class test 
JSONObject obj = new JSONObject(jsonString);
   public void checkAndAddEnumToList()
    if(listA.contain(MYOPTIONS.OPTION1.toString()))
 map.add(MYOPTIONS.OPTION1.toString(),obj.getJSONArray(MYOPTIONS.OPTION1.toString()));
    else if(listA.contain(MYOPTIONS.OPTION2.toString()))
       map.add(MYOPTIONS.OPTION2.toString(),obj.getJSONArray(MYOPTIONS.OPTION2.toString()));
   else if(listA.contain(MYOPTIONS.OPTION3.toString()))
      map.add(MYOPTIONS.OPTION3.toString(),obj.getJSONArray(MYOPTIONS.OPTION3.toString()));
   
  

我有 OPTION1 到 OPTION100,无论如何要避免 If-Else 并使用带循环的 REGEX? 以上只是一个示例。我希望用正则表达式替换 IF-ELSE

【问题讨论】:

for 选项 1 到 100? 是的。我不想要 100 个 IF-ELSE 块如果基于 OPTION1-100 和 setValue 的条件也相同 OPTION1-100 似乎拥有一个选项的 ArrayList 并遍历它会容易得多,并将列表 A 中的“找到”元素添加到列表 B 你应该迭代MYOPTIONS.values()。虽然实际迭代listA 可能会更有效,使用MYOPTIONS.valueOf() 解析每个值,如果解析成功则添加它。 A for loop to iterate over an enum in Java 的可能重复项。 【参考方案1】:

对于枚举,您可以使用 valueOf(),在 Java 8+ 中使用流(或遍历列表)。

public List<MYOPTIONS> checkAndAddEnumToList(List<String> listA) 
    List<Enums.ProfileVisibility> listB = new ArrayList<>();
    listA.stream().forEach(i -> listB.add(Enums.ProfileVisibility.valueOf(i)));
    return listB;

【讨论】:

以上是关于用于检查 Java 中的变量名以消除许多 IF-ELSE 块的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

从子查询中获取表名以在一行中用于 Oracle 中的删除/更新/插入子句

码农雷林鹏:php变量

在sqlserver2016中局部变量名以啥开头而全局变量

为什么断言不能用于公共方法中的参数检查?

php变量详细讲解

R语言 变量