在Java8中,从字符串中删除某些重复单词的优雅方法是什么
在Java 8中,从字符串中删除某些特定的重复单词的优雅方式是什么
有一个不重复的单词列表:[cat,mat]
给一根绳子:“一只猫坐在垫子上,戴着一顶帽子一只猫坐在垫子上,戴着一顶帽子”
结果应该是:“一只猫坐在垫子上戴着帽子,一只猫坐在垫子上戴着帽子”
注意:这是我们要保存的第一个实例
你可以在下面搜索框中键入要查询的问题!
在Java 8中,从字符串中删除某些特定的重复单词的优雅方式是什么
有一个不重复的单词列表:[cat,mat]
给一根绳子:“一只猫坐在垫子上,戴着一顶帽子一只猫坐在垫子上,戴着一顶帽子”
结果应该是:“一只猫坐在垫子上戴着帽子,一只猫坐在垫子上戴着帽子”
注意:这是我们要保存的第一个实例
# 1 楼答案
您可以这样做:
这利用了一个事实,即如果单词已经在集合中,
seen.add
将返回false作为对一些评论的回应,担心词语的顺序没有得到保留:
^{} 的文档没有明确说明返回的流是有序的,但它确实提到:
数组对它有一个已定义的顺序,也就是说,它是有序的,所以我认为读取它是安全的,因为返回的流也是有序的
获取有序流的另一种方法是使用
Arrays.spliterator
并将结果包装到流中(因为拆分器将通过documentation报告ORDERED
):但目前,
Arrays.stream
也这样做否则,始终存在for循环回退:
# 2 楼答案
更新Here一个使用正向前瞻的示例,删除的单词是第一个出现的
在爪哇
# 3 楼答案
寻求比其他解决方案更基本的解决方案
或者通过使用
String.split()
上的'limit'参数,您可以用以下内容替换上面的循环:这两个输出都是
A cat sat on a mat and wore a hat A sat on a and wore a hat
,但如果要删除双空格,可以在返回值以删除任何其他空格之前轻松调用input.replaceAll(" {2,}", " ");