我正在分析一堆员工事件报告以用于报告目的。
事件报告本身是自由文本,我必须按 body 位置对受伤情况进行分类。我试图避免 if{}elseif{}elseif{}....}else{}
。
事件报告示例:
Employee slipped on wet stairs and injured her knee and right arm, and struck her head on the handrail.
应该在受影响的区域添加“膝盖”、“ ARM ”和“头部”。
Employee was lifting boxes without approved protective equipment resulting in a back strain.
应该在受影响的区域添加“返回”。
While attempting to unjam copier, employee got right index finger caught in machinery resulting in a 1-inch cut.
应该在受影响的区域添加“手指”。
现在,我有:
private static StaffInjuryData setAffectedAreas(String incident, StaffInjuryData sid){
incident = incident.toUpperCase(); //eliminate case issues
if(incident.contains("HEAD")){
sid.addAffectedArea("HEAD");
}else if(incident.contains("FACE")){
sid.addAffectedArea("FACE");
}else if(incident.contains("EYE")){
sid.addAffectedArea("EYE");
}else if(incident.contains("NOSE")){
sid.addAffectedArea("NOSE");
}
//etc, etc, etc
return sid;
}
有没有比 if-elseif-ad inifinitum 更简单/更有效的方法来做到这一点?
请您参考如下方法:
一种方法是从各个 body 部位构造一个正则表达式,用它来搜索字符串,然后将各个匹配项添加到列表中:
Pattern bodyParts = Pattern.compile("\\b(head|face|eye|nose)\\b", Pattern.CASE_INSENSITIVE);
在两端使用 \b
可以防止部分匹配,例如在 “eyelid”
内包含 “forehead”
或 “eye”
的文本中找到 “head”
。