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