第一次在这里发帖,请告诉我是否需要更改格式,我会这样做。
我需要从缓冲区中提取一个已定义的区域,并应用将字符“y”替换为字符“y”的代码,我在下面尝试过:
buffer.substring(lwr,upr).replace(s,t)
然而,我的所有JUNIT测试都失败了,我无法理解为什么。
有人有任何指针吗?谢谢!
编辑:
例如,给出以下内容:
a p p r o p r i a t e (Marker position is 2, cursor position is 6)
^ ^
执行“subChar('p','x')应该导致输出:
a p x r o x r i a t e (Marker position and cursor position DO NOT CHANGE)
^ ^
答案 0 :(得分:0)
我认为你的问题是你的Buffer,我创建了一个ScalaFiddle,它演示了简单的String和一个简单的List实现:
val str = "appropriate"
println (str.replace('p', 'x')) // axxroxriate
val list = str.toList.map{
case c if c == 'p' => 'x'
case c => c
}
println (list) // List(a, x, x, r, o, x, r, i, a, t, e)
检查您的实施或将您的实施添加到您的问题中。
以下是区域的示例:
def replaceBetween(str: String, start: Int, end: Int, what: Char, byWhat: Char): String = {
val prefix = str.take(start)
val postfix = str.drop(end)
val toMap = str.drop(start).take(end-start).replace(what, byWhat)
prefix + toMap + postfix
}
println(replaceBetween("appropriate", 2, 6, 'p', 'x'))
您可以尝试自己:ScalaFiddle
答案 1 :(得分:0)
如果你接受一个字符串,然后子字符串,然后在结果上调用replace
,结果字符串将与原始字符串无关,因此你的解决方案显然无法工作。
链接答案的索引方案保持不变,答案很容易推广到可应用于字符的任意函数:
def mapBetween(str: String, start: Int, end: Int)(f: Char => Char) = {
val (a, bc) = str.splitAt(start)
val (b, c) = bc.splitAt(end - start)
a + b.map(f) + c
}
def replaceBetween(str: String, start: Int, end: Int, what: Char, byWhat: Char): String = {
mapBetween(str, start, end){ c =>
if (c == what) byWhat else c
}
}
根据上述定义,这里:
println(replaceBetween("appropriate", 2, 6, 'p', 'x'))
产生
apxroxriate