2016-06-21 90 views
3

我想刪除字符串中最後一次出現的字符。我可以得到它的index:對字符串Scala:刪除最後一次出現的字符

str.lastIndexOf(',') 

我已經嘗試使用splitreplace功能。

+0

你可以試試:'s.substring(0,s.length -1)'(假設's'是一個字符串)。 – alifirat

+0

這不是最後一個索引。它在文本的中間 – CMPE

+0

字符串有多大?你關心它的效率嗎? – nattyddubbs

回答

11

你可以使用patch

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

工作!謝謝! – CMPE

0

你可以嘗試以下方法:

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

警告 - 'List#tail'是一個部分函數 - 'List()。尾 java.lang.UnsupportedOperationException:空尾列表的尾部' –

+0

謝謝,我修復了我的解決方案。 –

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

爲了downvoter:爲什麼?我很高興收到我發佈的解決方案的批評。 –

相關問題