Scala:删除最后一个字符

时间:2016-06-21 13:20:28

标签: string scala indexing

我正在尝试删除字符串中最后一个字符。我可以得到index

str.lastIndexOf(',')

我已经尝试在字符串上使用splitreplace函数。

4 个答案:

答案 0 :(得分:13)

您可以使用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

答案 1 :(得分: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"

答案 2 :(得分: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

答案 3 :(得分:0)

很好奇为什么 Scala 没有 .replaceLast 但一定有原因......

反转字符串并使用 str.replaceFirst 然后再次反转

我怀疑这效率很差,但它很有效:)

scala> "abc.xyz.abc.xyz".reverse.replaceFirst("zyx.", "").reverse
res5: String = abc.xyz.abc

作为定义,它看起来像这样:

def replaceLast(input: String, matchOn: String, replaceWith: String) = {
  input.reverse.replaceFirst(matchOn.reverse, replaceWith.reverse).reverse
}