我正在编写客户解析器,从应用程序日志中提取信息的关键部分,以帮助解决调试问题。
在解析器代码中,我有很多以下逻辑的例子:
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;
}
我也想避免三元声明。
答案 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;
}