如何在字符串中切换两个字母?

时间:2011-02-20 15:38:59

标签: scala

我想切换字母的顺序。例如,有一个字符串“abc”,输出必须是“bac”。你能告诉我怎么做吗?

提前谢谢。

3 个答案:

答案 0 :(得分:5)

您可以使用事实,String可以隐式转换为IndexedSeq[Char]

def switch(s: String) = (s take 2 reverse) + (s drop 2)

此函数也适用于小于2个字符的字符串,只需尝试:

println(switch("abc")) // prints: bac
println(switch("ab")) // prints: ba
println(switch("a")) // prints: a
println(switch("")) // prints: 

答案 1 :(得分:2)

您的问题不清楚是否需要反转字符串的内容,或者您​​是否需要在字符串中交换两个字符的内容。这个答案适用于后者

def swap(s : String, idx1 : Int, idx2 : Int) : String = {
  val cs = s.toCharArray
  val swp = cs(idx1)
  cs(idx1) = cs(idx2)
  cs(idx2) = swp
  new String(cs)
}

当然,您可以将其概括为可以被视为IndexedSeq的任何内容:

 def swap[A, Repr](repr : Repr, idx1 : Int, idx2 : Int)
     (implicit bf: CanBuildFrom[Repr, A, Repr], 
      ev : Repr <%< IndexedSeqLike[A, Repr]) : Repr = {
  val swp = repr(idx1)
  val n = repr.updated(idx1, repr(idx2))
  n.updated(idx2, swp)
}

答案 2 :(得分:0)

如何更实用?

import collection.breakOut

def swap(s:String, x:Int, y:Int):String = s.zipWithIndex.collect{
  case (_,`x`) => s(y)
  case (_,`y`) => s(x)
  case (c,_) => c
}(breakOut)