执行if else检查和设置值以供以后使用。寻找更清洁的方式

时间:2014-03-26 09:32:11

标签: java if-statement

我正在编写客户解析器,从应用程序日志中提取信息的关键部分,以帮助解决调试问题。

在解析器代码中,我有很多以下逻辑的例子:

    String element = "";
    if( rawLogText.contains("RequestType") ) {
        element = "RequestType";
    }
    else if( rawLogText.contains("ResponseType") ) {
        element = "ResponseType";
    }

    if( element.equals("") ) {
        return;
    }

我觉得有一种更简洁的方法可以做这种 check-set-return-process 逻辑。

任何人都可以想出一个更干净的方法吗?

这是我最初的所作所为,但是多重检查包含了我的错误。

    String element = "";
    if( rawLogText.contains("RequestType") || rawLogText.contains("ResponseType") ) {
        if( rawLogText.contains("RequestType") ) {
            element = "RequestType";
        }
        else if( rawLogText.contains("ResponseType") ) {
            element = "ResponseType";
        }
    }
    else {
        return;
    }

我也想避免三元声明。

3 个答案:

答案 0 :(得分:3)

这样做而不是检查element.equals()

String element = null;
if( rawLogText.contains("RequestType") ) {
    element = "RequestType";
}
else if( rawLogText.contains("ResponseType") ) {
    element = "ResponseType";
} else {
    return;
}
//continue the process

答案 1 :(得分:2)

我认为@GuillermoMerino的解决方案可能是最好的。

但是如果你在解析中重复这个模式,你可以将它抽象为辅助方法; e.g。

public String matchWord(String input, String... words) {
   for (String word: word) do
       if (input.contains(word) ) {
           return word;
       }
   }
   return "";
}

并像这样使用它:

String element = matchWord(rawLogText, "RequestType", "ResponseType");
if (element.equals("")) {
    return;
}

答案 2 :(得分:1)

我们假设您将所有types放在一个字符串数组中:

 String[] possibleTypes = {"RequestType", "ResponseType"}; // and such

现在您可以使用for循环来检查和设置值

 String element = ""
 for (String type : possibleTypes) {
     if (rawLogText.contains(type)) {
         element = type;
         break;
     }
 }

 if( element.equals("") ) {
    return;
 }