反转定义区域内的字符大小写[Scala]

时间:2018-04-01 14:56:46

标签: scala junit

我试图编写一个函数来反转定义区域内的任何字母字符的情况(从光标位置到标记位置)但是我很难挣扎。

我觉得与此非常相似的东西会起作用,但我无法理解它。

def invertCase() {
this.getString.map(c => if(c.isLower) c.toUpper else c.toLower)
}

我需要在定义的区域内反转字母字符的大小写(据我所知)我通过调用this.getString(getString获取缓冲区并将其转换为字符串)来做。

通过这样做.getString我相信我选择的区域需要将其字母字符反转,但是跟随它的代码并没有按照我想要的方式进行。

任何指针?

谢谢!

编辑:缓冲区是StringBuilder类型,如果它改变任何东西

XD

2 个答案:

答案 0 :(得分:0)

您可以使用splitAtmap反转部分字符串,如下所示:

def invertBetween(start: Int, end: Int, str: String) = { 
  val (a, bc) = str.splitAt(start)
  val (b, c) = bc.splitAt(end - start)
  a + b.map(c => if (c.isUpper) c.toLower else c.toUpper) + c 
}

示例:

invertBetween(3, 10, "Hello, World, Foo, BAR, baz")
      res10: String = HelLO, wORld, Foo, BAR, baz
                         ^^^^^^^

答案 1 :(得分:0)

以下是使用collectzipWithIndex

的解决方案
scala> val start = 4
start: Int = 4

scala> val end = 9
end: Int = 9

scala> val result = ("Your own String value.").zipWithIndex.collect {
  case e if(e._2 >= start && e._2 <= end) => if (e._1.isLower) e._1.toUpper else e._1.toLower
  case e => e._1
}.mkString("")
result: String = Your OWN string value.