2016-06-21 14 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()。tail 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に:なぜですか?投稿されたソリューションの批判を受けてうれしいです。 –

関連する問題