我有一个输入文件
names.txt
Maria Derek Erica
Livia Jack Anita
Kendall Maria Livia Derek
Jamie Jack
Thomson Erica
我想输出像。从名称中删除重复的单词
output.txt
Maria Derek Erica
Livia Jack Anita
Kendall
Jamie
Thomson
我已经尝试读取由空格分隔的文件,然后将它们添加到ArrayList中,然后丢失了下一步要生成输出的操作。
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
public class duplicate {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<String>();
File file = new File("weather.txt");
Scanner input = new Scanner(file);
String prev = input.next();
int count = 0;
while (input.hasNext()) {
String next = input.next();
System.out.println(next);
set.add(next);
count = count + 1;
if(prev.equals(next))
{
System.out.println("Match found: -" + prev);
}
prev = next;
}
System.out.println(list);
System.out.println("Word count: " + count);
}
}
最佳答案
您将要使用Set或HashSet来跟踪重复的名称,并使用ArrayList来存储要写入输出文件的最终行。
由于我们是逐行进行更改,因此我们需要1)逐行读取文件,2)拆分行以处理各个名称,3)编辑行或创建新的结果行,然后4)然后存储编辑的行以在末尾输出:
import java.util.*;
import java.io.*;
public class Duplicate {
public static void main(String[] args) throws IOException {
HashSet<String> uniqueNames = new HashSet<String>();
ArrayList<String> outputLines = new ArrayList<String>();
Scanner input = new Scanner(new File("input.txt"));
while (input.hasNextLine()) {
// Split a line into an array of names.
String[] names = input.nextLine().split(" ");
String edited = "";
for (int i = 0; i < names.length; i++) {
// If the name is already in the set, remove it.
if (uniqueNames.add(names[i])) {
edited += names[i] + " ";
}
}
edited = edited.strip(); // remove excess whitespace
// Add the final line to our output array.
if (!edited.equals("")) {
outputLines.add(edited);
}
}
// Write the output array to a file.
String outputFn = "output.txt";
BufferedWriter output = new BufferedWriter(new FileWriter(outputFn));
output.write(String.join("\n", outputLines));
output.close();
System.out.println("File '" + outputFn + "' created!");
}
}
如果您想添加其他功能(例如计算总单词数或唯一单词数),我将其作为练习,因为问题似乎主要与删除重复行为有关。
关于java - 如何使用Java从文本文件中删除重复的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56381087/