我想切换字母的顺序。例如,有一个字符串“abc”,输出必须是“bac”。你能告诉我怎么做吗?
提前谢谢。
答案 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)