val aggFilters = Array["IR*","IR_"]
val aggCodeVal = "IR_CS_BPV"
val flag = compareFilters(aggFilters,aggCodeVal)
根据我的要求,我想比较aggFode中给出的模式与aggCodeVal。第一种模式“IR *”与“IR_CS_BPV”匹配,但不是第二种模式,因此我希望在找到匹配之后跳出for循环,这样我就不会去找第二个“IR_”。我不想使用像java这样的break语句。我想模式匹配的字符串数组与单个字符串在斯卡拉?
def compareFilters(aggFilters: Array[String], aggCodeVal: String): Boolean = {
var flag: Boolean = false
for (aggFilter <- aggFilters) {
if (aggFilter.endsWith("*")
&& aggCodeVal.startsWith(aggFilter.substring(0, aggFilter.length() - 1))) {
flag = true
}
else if (aggFilter.startsWith("*")
&& aggCodeVal.startsWith(aggFilter.substring(1, aggFilter.length()))) {
flag = true
}
else if (((aggFilter startsWith "*")
&& aggFilter.endsWith("*"))
&& aggCodeVal.startsWith(aggFilter.substring(1, aggFilter.length() - 1))) {
flag = true
}
else if (aggFilter.equals(aggCodeVal)) {
flag = true
}
else {
flag = false
}
}
flag
}
not working .. compareFilter(Array(“IR _”,“ABC *”),“IR_ABC”)返回true,但返回false。 –
这是因为'ABC *'模式匹配目标字符串的最后3个字符。通配符“*”表示“零个或多个额外字符”。如果你需要它来表示“一个或多个额外的字符”,则将'replace()'从'。*'改为'。+'。另一方面,如果由于目标字符串没有用ABC开始,它应该返回'false',然后将正则表达式更改为'“^ $ f $$”'。 – jwvh
由于提供了有限的示例,我不确定模式匹配的确切要求是什么,但是'Regex'库非常灵活,所以它可能会根据您的需求进行调整。 – jwvh