Java:如果找不到正则表达式,请执行某些操作

时间:2018-07-05 20:49:55

标签: java regex

我正在解析日志文件,发现正则表达式时需要做一件事(将',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'时,将没有以下条目;当正则表达式不匹配并且返回“,”时,将有其他条目。

2 个答案:

答案 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
}