Java中许多if-else语句的性能不佳

lit*_*leK 8 java performance conditional if-statement

我有一个方法,用32个if-else语句检查5种不同条件的所有组合(想想真值表).5个不同的字母表示每个在字符串上运行自己的正则表达式的方法,并返回一个布尔值,指示字符串是否与正则表达式匹配.例如:

if(A,B,C,D,E){

}else if(A,B,C,D,!E){

}else if(A,B,C,!D,!E){

}...etc,etc.
Run Code Online (Sandbox Code Playgroud)

但是,它确实影响了我的应用程序的性能(对不起,我不能详细介绍).谁能推荐一种更好的方法来处理这种逻辑?

使用正则表达式的每个方法如下所示:

String re1 = "regex here";
Pattern p = Pattern.compile(re1, Pattern.DOTALL);
Matcher m = p.matcher(value);
return m.find();
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pet*_*rey 18

你可以试试

boolean a,b,c,d,e;
int combination = (a?16:0) + (b?8:0) + (c?4:0) + (d?2:0) + (e?1:0);
switch(combination) {
   case 0:
        break;
   // through to
   case 31:
        break;
}
Run Code Online (Sandbox Code Playgroud)


jta*_*orn 8

将每个条件表示为位标志,测试每个条件一次,并在单个int中设置相关标志.然后打开int值.

int result = 0;
if(A) {
  result |= 1;
}
if(B) {
  result |= 2;
}
// ...

switch(result) {
  case 0: // (!A,!B,!C,!D,!E)
  case 1: // (A,!B,!C,!D,!E)
  // ...
}
Run Code Online (Sandbox Code Playgroud)