如何从两个字符串中删除常用字,同时使用Groovy保持白色空间不变?

时间:2017-11-06 10:35:53

标签: groovy

我有两个字符串,

def str1 = "This is test"
def str2 = "That is test"

我想使用Groovy找到这两个字符串之间的区别。

我尝试了-运算符,但它似乎无法正常运行。

println 'This is test' - 'That is test'

我希望输出为This That

但是,上面的代码评估为第一个字符串This is test。我哪里错了?有没有其他方法可以使用Groovy来区分两个字符串?

1 个答案:

答案 0 :(得分:1)

String的减号运算符的工作方式不同 - 它会删除部分String。在您的情况下,您得到This is test因为此String不包含像That is test这样的子字符串。

如果要获得两个字符串中不同的单词串联,可以对两个字符串进行标记,并将它们转换为一对单词并删除包含相同单词的对。剩下的单词可以与空格字符结合,例如:

def str1 = "This is test"
def str2 = "That is test"

def diff = [str1.tokenize(), str2.tokenize()].transpose() // creates a list of pairs like [["This", "That"], ["is", "is"], ["test", "test"]]
        .findAll { it[0] != it[1] }                       // filters out pairs containing the same word
        .flatten()                                        // flats [["This", "That"]] to ["This", "That"]
        .join(' ')                                        // creates a final String "This That"

assert diff == 'This That'