我有一个字符串,一个更改字符串和范围的函数。 我想得到一个用修改后的
替换初始子字符串的函数例如:
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"
答案 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和其他语言中操作字符串时的标准。我将假设不包含范围。
slice
和patch
在这里很有用:
def applyOnSlice(s: String, start: Int, end: Int, fn: String => String) =
s.patch(
start,
fn(s.slice(start, end)),
end)