我正在解析日志文件,发现正则表达式时需要做一件事(将',TRUE'添加到变量,.csv,ArrayList),以及其他操作(添加空插槽,“,”或如果找不到该正则表达式,则为“,_”(如果空插槽不好)。
每个日志文件中可能解析1-〜200个条目-因此正则表达式可以匹配无数次。
我尝试了几种选择,要么在编译时出错(不喜欢对字符串测试布尔值),没有可观察到的动作发生,或者当找到正则表达式时,当找不到正则表达式时我得到了结果。
我需要将输出输出为变量,.csv或ArrayList,因此,如果找不到匹配项,则需要一个空的',',因为输出是预定义的表,因此各列需要正确对齐
我尝试过的组合:
if(!noBaseText.equals("No matching base data found"))
if(!noBaseText.equals("No matching base data found") == false)
if(noBaseText.equals("No matching base data found" != true))
if(noBaseText.isEmpty())
if(noBaseText.equals(""))
if(!noBaseText.equals(""))
if(noBaseText.equals("No matching base data found"))
'} else {'和'} else if(...){'与上面的组合,同时是嵌套的if / else(如下面的代码)或'if(baseMatcher)的'else' .find())'返回相同的结果。
代码段:
Pattern noBase = Pattern.compile("(?<noBase>No matching base data found)");
try(corrReader)
{
while ((corrLine = corrReader.readLine())!=null)
{
corrText = corrLine.trim();
Matcher baseMatcher = noBase.matcher(corrText);
if (baseMatcher.find())
{
String noBaseText = baseMatcher.group("noBase");
if(!noBaseText.equals("No matching base data found"))
{
corrOutput += ",";
} else if(noBaseText.equals("No matching base data found")) {
corrOutput += ",TRUE";
} //end else
} //end if(baseMatcher)
} //end while(corrLine)
} //end try(corrReader)
匹配时我得到的输出:
AA-123-12345-SP1.SSF,是的,
没有匹配项时得到的输出:
AA-123-12345-SP2.SSF,100,100,guug04314054.zip,
在没有匹配项时我需要获得的输出:
AA-123-12345-SP2.SSF ,, 100,100,guug04314054.zip,
当正则表达式匹配并且返回',TRUE'时,将没有以下条目;当正则表达式不匹配并且返回“,”时,将有其他条目。
答案 0 :(得分:0)
您可以使用三元运算符来完成此操作:
boolean found = false;
while ((corrLine = corrReader.readLine())!=null)
{
...
String noBaseText = baseMatcher.group("noBase");
found |= noBaseText.equals("No matching base data found");
...
}
corrOutput += found ? "TRUE," : ",";
如果found
的计算结果为true,则将得到"TRUE,"
,否则为","
。
答案 1 :(得分:0)
我不确定我是否正确,但是..如果您要检查模式是否为空,请执行以下操作:
if(noBase.pattern().isEmpty()) {
// do your stuff
}