【发布时间】:2018-07-09 02:43:45
【问题描述】:
我正在解析日志文件,并且需要在找到正则表达式时做一件事(将 ',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(如下面的代码)还是作为 'else' 到 'if (baseMatcher .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'时,不会有后面的条目;当正则表达式不匹配并返回“,”时,将会有额外的条目。
【问题讨论】:
-
find()的结果还不够吗?为什么检查组? -
顺便说一句,如果
find()返回true,则该组将始终是该文本,因此您永远不会得到","。试试corrOutput += baseMatcher.find() ? "TRUE," : ",";或if (baseMatcher.find()) { corrOutput += "TRUE,"; } else { corrOutput += ","; } -
@Carlos Hueberger 输出是 .csv,因此该字段的列在不为真时会被保留,在导入电子表格时会丢弃列。
-
@Carlos Hueberger 我尝试了您的建议,但结果没有变化。谢谢你的帮助,寿!!
-
只使用
find()的结果; 不要使用group(...)