2016-06-21 18 views
3

Ich versuche, das letzte Vorkommen eines Zeichens in einer Zeichenfolge zu entfernen. Ich kann seine index erhalten:Scala: Entfernen Sie das letzte Vorkommen eines Zeichens

str.lastIndexOf(',') 

Ich habe bereits versucht split und die replace Funktion auf der Saite zu verwenden.

+0

Sie können versuchen, dass: 's.substring (0, s.length -1)' (annehmen 'S' ist ein String). – alifirat

+0

Es ist nicht auf dem letzten Index. Es ist in der Mitte des Textes – CMPE

+0

Wie groß ist die Zeichenfolge? Interessiert es dich, wie effizient es ist? – nattyddubbs

Antwort

11

Sie patch nutzen könnten.

scala> val s = "s;dfkj;w;erw" 
s: String = s;dfkj;w;erw 

scala> s.patch(s.lastIndexOf(';'), "", 1) 
res6: String = s;dfkj;werw 
+0

'indexOf' ->' lastIndexOf' –

+0

Das funktioniert! Vielen Dank! – CMPE

0

könnten Sie versuchen, die folgenden:

val input = "The quick brown fox jumps over the lazy dog" 
val lastIndexOfU = input.lastIndexOf("u") 
val splits = input.splitAt(lastIndexOfU) 
val inputWithoutLastU = splits._1 + splits._2.drop(1) // "The quick brown fox jmps over the lazy dog" 
+0

Warnung - 'List # Tail' ist eine Teilfunktion -' List(). Ende java.lang.UnsupportedOperationException: Schwanz der leeren Liste –

+0

Danke, ich habe meine Lösung behoben. –

0
scala> def removeLast(x: Char, xs: String): String = { 
    | 
    | val accumulator: (Option[Char], String) = (None, "") 
    | 
    | val (_, applied) = xs.foldRight(accumulator){(e: Char, acc: (Option[Char], String)) => 
    |  val (alreadyReplaced, runningAcc) = acc 
    |  alreadyReplaced match { 
    |   case some @ Some(_) => (some, e + runningAcc) 
    |   case None   => if (e == x) (Some(e), runningAcc) else (None, e + runningAcc) 
    |   } 
    | } 
    | 
    | applied 
    | } 
removeLast: (x: Char, xs: String)String 

scala> removeLast('f', "foobarf") 
res7: String = foobar 

scala> removeLast('f', "foobarfff") 
res8: String = foobarff 
+0

Um downvoter: warum? Ich freue mich über Kritik an meiner veröffentlichten Lösung. –

Verwandte Themen