替换Scala中的范围指定的子字符串

时间:2017-08-03 19:03:31

标签: scala

我有一个字符串,一个更改字符串和范围的函数。 我想得到一个用修改后的

替换初始子字符串的函数

例如:

val initialString = "abcdefgh" 
// range for getting substring, thus substring is "abc"
val (start, end) = (0, 3) 
// function for changes a string
def f(s: String) = s + "@" 
val modifiedSubstring = f(initialString.substring(start, end)) // "abc@"
// I don't know hot to implement desiredFunction
val res = desiredFunction(initialString, start, end, f) // "abc@defgh"

2 个答案:

答案 0 :(得分:2)

以下是您的注意事项,请注意我必须在索引上添加+1,因为从您的示例中您的范围是包含的,而Scala中的字符串函数则不是。

def desiredFunction(string: String, startIndex: Int, endIndex: Int, replaceFunc: (String) => String) = {

  // Get the first part
  val a = string.substring(0, startIndex)

  // Get the middle part and do your replacing
  val b = replaceFunc(string.substring(startIndex, endIndex + 1))

  // Get the last part
  val c = string.substring(endIndex + 1)

  // Put it all together and return
  a + b + c
}

答案 1 :(得分:1)

我建议你使用非包含范围,这是在Scala,Java和其他语言中操作字符串时的标准。我将假设不包含范围。

slicepatch在这里很有用:

def applyOnSlice(s: String, start: Int, end: Int, fn: String => String) =
  s.patch(
    start,
    fn(s.slice(start, end)),
    end)