如何在字符串中添加特定元素

时间:2015-04-07 15:43:10

标签: scala

我在查找如何使用scala删除指定位置的元素时遇到问题。

如何使用scala将字符拖放到字符串中的指定位置,以及如何在scala中的字符串中的指定位置添加字符?

3 个答案:

答案 0 :(得分:3)

大多数情况可以使用patch方法完成:

val x = "abcdefgh"
//Replace 1 element starting at the 4th position with "" (thereby eliminating the fourth element)
x.patch(4, "", 1) //"abcdfgh"

//Replace 0 elements starting at the 4th position with "A" (thereby adding an element after the fourth element)
x.patch(4, "A", 0) //"abcdAefgh"

该方法在GenSeqLike上定义,它在类型层次结构中非常高,因此您可以在patch以外的类型上使用String

 List(1, 2, 3, 4, 5, 6, 7).patch(4, Seq(), 1) //List(1, 2, 3, 4, 6, 7)

阅读patch here

的文档

您还可以丰富GenSeqLike以更轻松地使用此类方法:

import scala.collection.GenSeqLike
implicit class RichGenSeqLike[T, Repr <% GenSeqLike[T, Repr]](val seq: Repr) {
    import scala.collection.generic.CanBuildFrom
    def dropAt[That](n: Int)(implicit bf: CanBuildFrom[Repr, T, That]): That = seq.patch(n, Seq.empty[T], 1)
    def addAt[That](n: Int)(ts: T*)(implicit bf: CanBuildFrom[Repr, T, That]): That = seq.patch(n, ts, 0)
}

然后你可以这样做:

List(1, 2, 3).dropAt(1) //List(1, 3)
"abc".dropAt(1) //"ac"

List(1, 2, 3).addAt(1)(4) //List(1, 4, 2, 3)
List(1, 2, 3).addAt(1)(4, 5, 6) //List(1, 4, 5, 6, 2, 3)
"abc".addAt(1)('A') //aAbc
"abc".addAt(1)('A', 'B') //aABbc
"abc".addAt(1)("ABC":_*) //aABCbc

当然,如果您将其添加到标准库中,您可能会考虑进行一些边界检查。

答案 1 :(得分:1)

您可以使用“子字符串”将字符串分解为两部分,然后在添加所需字符后,可以再次组合它们。

答案 2 :(得分:1)

使用@BenReich的patch可能是最惯用和最简洁的方法;另一种方式包括例如在字符串上使用takedrop作为Char的序列,就像这样,

val s = ('a' to 'e').mkString
s: String = abcde

scala> s.take(2) ++ s.drop(3)  // remove third char
res0: String = abde

scala> s.take(2) ++ "CCC" ++ s.drop(3)  // replace third char with a string
res1: String = abCCCde

scala> s.take(2) ++ s.drop(4)  // remove from third to fourth chars
res2: String = abe

请注意,这不是大字符串最有效的方法。