我有一个名为test1.txt的文本文件,我想删除所有重复项。这意味着只有唯一的单词在那里。 例子。
test1.txt:
dp/dt
输出应为:
hello i am a businessman i am also a student
我的方法是这样的:
hello businessman also student
但这不是我想要的。我想删除重复出现的所有内容,以便我只能输出唯一的单词。
答案 0 :(得分:1)
您需要的是Set接口的实现。 Java提供了多个:
就像其他人提到的那样,这似乎是一个明确的作业问题。因此,我不会为您编写解决方案的代码。但是,我将向您展示一个可行的示例算法。
步骤1:打开文件以逐个读取单词。
步骤2:声明两组,一组用于存储所有单词,另一组用于存储重复项。
步骤3:逐个阅读单词,然后尝试将其插入第一组。 Java的set的add方法根据插入成功或失败返回一个布尔值,表示正确或错误。
步骤4:尝试插入第一组。
步骤4.1:如果插入成功,则表明该词到目前为止从未遇到过。移至下一个单词,然后再次执行步骤4。
步骤4.2:如果插入失败,则意味着该单词已经在以前出现过,因此我们不应将其包含在最终列表中。因此放在第二个列表中。继续下一个单词,然后再次执行步骤4。
步骤5:完成所有单词后,您将在第一组(集合A)中拥有一组唯一的单词,以及在该段落中出现多次的一组单词。 (设置B)。
步骤6:执行A-B(A中所有单词的集合,但B中所有单词的集合)
步骤7:以上结果使所有单词只出现一次。
请注意,这只是解决方案的一种算法。还有其他使用其他数据结构的解决方案。 (您可以使用HasMap,在其中可以将每个单词映射到它出现的次数,然后将所有出现的单词打印一次。)还要注意,您也可以使用ArrayLists实现上述解决方案。弄清楚这些工作原理,您将真正学到一些东西。
答案 1 :(得分:1)
您可以使用HashMap跟踪每个单词及其在给定文本文件中的出现。
键->单词,值->字数
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(new File("test1.txt"));
ArrayList<String> list1 = new ArrayList<String>();
HashMap<String, Integer> wordMap = new HashMap<String, Integer>();
while (input.hasNext()) {
list1.add(input.next());
}
for (String word : list1) {
if (wordMap.get(word) == null) {
wordMap.put(word, 1);
} else {
wordMap.put(word, wordMap.get(word) + 1);
}
}
//If output order does not important just loop through wordMap
for (String word : list1) {
if(wordMap.get(word) == 1) {
System.out.print(word + " ");
}
}
}
输出:
你好商人也是学生
答案 2 :(得分:0)
逐字处理句子。如果以前没有看到过该单词,请将其添加到已看到单词的“字典”中。如果单词在词典中,请删除它。
首先将字符串分成单词数组,然后按照上述逻辑遍历该数组。
答案 3 :(得分:0)
我只写这篇文章,因为有很多答案给出了复杂且非最佳的解决方案。
@Sambit提供的建议很简单,您应该这样做!
使用已有的代码,只需使用list1
。
public class MyClass {
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(new File("test1.txt"));
ArrayList<String> list1 = new ArrayList<String>();
while (input.hasNext()) {
list1.add(input.next());
}
// This will automatically remove all duplicates from your list.
HashSet<String> uniqueWords = new HashSet<>(list1);
// Print all the unique words
for(String word : uniqueWords)
System.out.println(word);
}
输出:
你好,我也是商人,还是学生
集合是不同对象的集合,这意味着没有重复项。
HashSet
的文档为here