我试图从Scala中的字符串中删除重复的单词。
我写了一个udf(下面的代码)从字符串中删除重复的单词:
val de_duplicate: UserDefinedFunction = udf ((value: String) => {
if(value == "" | value == null){""}
else {value.split("\\s+").distinct.mkString(" ")}
})
Run Code Online (Sandbox Code Playgroud)
我面临的问题是它也从字符串中删除了单个字符标记,
例如,如果字符串是:
"test abc abc 123 foo bar f f f"
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
"test abc 123 foo bar f"
Run Code Online (Sandbox Code Playgroud)
我要做的是仅删除重复的单词,而不删除单个字符。我可以想到的一种解决方法是替换字符串中任何单个字符标记之间的空格,以使示例输入字符串变为:
"test abc abc 123 foo bar fff"
Run Code Online (Sandbox Code Playgroud)
这可以解决我的问题,我无法找出正确的正则表达式模式,但我相信可以使用捕获组或提前完成。我在其他语言中也看过类似的问题,但无法弄清楚scala中的正则表达式模式。
任何帮助,将不胜感激!
假设您有一个List(1,1,1,4,4,1)并且必须计算连续重复的列表头部元素的次数.在上面的示例中,方法应该返回3.在此方法中,我们只关心第一个元素.
我走到这一步并陷入困境.鉴于第一个不可重复的角色,我想打破,怎么样?
def firstRepeated [X] (xs: List[X]) : Int = xs match {
case Nil => 0
case y::ys => ys match {
case Nil => 0
case z::zs => if (y == z) 1 + firstRepeated(zs) else // break
}
}
Run Code Online (Sandbox Code Playgroud)
另外,在上面的代码中,我认为我没有正确处理列表的情况 z::Nil
任何指针将不胜感激