2016-04-13 12 views
1

Ich versuche, eine Teilzeichenfolge aus einer Zeichenfolge zu filtern. Das Problem ist, anstatt nur die Unterzeichenfolge "fd" aus "fdskufh" zu entfernen. Es entfernt "fd" aus der Zeichenkette, aber entfernt dann auch die zweite f, so dass die neue Zeichenkette "skuh" ist. Irgendwelche Vorschläge würden sehr geschätzt? Ich habe mit der Funktion unter:Scala Filter Teilzeichenfolge aus Zeichenfolge

 def stripChars(s:String, ch:String)= s filterNot (ch contains _) 
+2

's.replace (ch," ")'? –

Antwort

-1

Betrachten Sie, was Ihre Codezeile bedeutet: es wird laufen alle Zeichen in s, und es wird alle Zeichen herauszufiltern, die in ch sind. Was Sie also beobachten, ist tatsächlich, was zu erwarten ist.

Sie können einen regulären Ausdruck verwenden:

val regex = "fd".r 
val input = "fdskufh" 

val result = regex.replaceAllIn(input, "") 
+0

Funktioniert perfekt! Wird dies als die richtige Antwort setzen, sobald ich dazu in der Lage bin. Vielen Dank!!! –

+0

Downvoter: Bitte erläutern Sie, warum Sie dies abgelehnt haben. – Jesper

+0

Ich bin nicht der Downvoter, aber das offensichtliche Problem ist, dass es nicht funktioniert, wenn die zu entfernende Zeichenfolge Sonderzeichen für reguläre Ausdrücke enthält. –

1

Wie wäre es damit:

scala> def stripChars(s: String, ch: String) = s.split(ch).mkString 
stripChars: (s: String, ch: String)String 

scala> stripChars("fdskufh", "fd") 
res194: String = skufh 

Dies hat den Vorteil, dass der ursprüngliche Zeichenfolge zurückkehrt, wenn die Zeichenfolge nicht existiert. So können Sie dieses:

scala> stripChars("fdskufh", "ff") 
res195: String = fdskufh 

Und es wäre auch für folgende Arbeiten:

scala> stripChars("fdskufhfdsh", "fd") 
res196: String = skufhsh 

EDIT:

Oder Sie können das alles ignorieren und nur mit s.replace(ch, "") wie Sergey vorgeschlagen

Verwandte Themen