val aggFilters = Array["IR*","IR_"]
val aggCodeVal = "IR_CS_BPV"
val flag = compareFilters(aggFilters,aggCodeVal)
Laut meiner Anforderung möchte ich die in den aggFilters angegebenen Muster mit aggCodeVal vergleichen. Das erste Muster "IR *" ist eine Übereinstimmung mit "IR_CS_BPV", aber nicht das zweite, daher möchte ich nach dem Finden der Übereinstimmung aus der for-Schleife ausbrechen, so dass ich nicht für die zweite "IR_" gehe. Ich möchte keine Break-Anweisung wie Java verwenden.Ich möchte eine Übereinstimmung von Array of String mit einem einzelnen String in scala mattern?
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
}
funktioniert nicht .. compareFilter (Array ("IR _", "ABC *"), "IR_ABC") gibt true zurück, sollte aber false zurückgeben. –
Das liegt daran, dass das Muster ABC * mit den letzten 3 Zeichen der Zielzeichenfolge übereinstimmt. Die Wildcard '*' wird als "null oder mehr zusätzliche Zeichen" verstanden. Wenn Sie es brauchen, um "ein oder mehrere zusätzliche Zeichen" zu bedeuten, dann ändern Sie die 'replace()' von '. *' Zu '. +'. Wenn andererseits "false" zurückgegeben werden soll, weil die Zielzeichenfolge nicht mit "ABC" beginnt, dann ändern Sie die Regex in "^ $ f $$" '. – jwvh
Mit den wenigen zur Verfügung gestellten Beispielen war ich nicht sicher, was die genauen Anforderungen für den Mustervergleich waren, aber die 'Regex'-Bibliothek ist ziemlich flexibel, so dass sie wahrscheinlich an Ihre Bedürfnisse angepasst werden kann. – jwvh