我正在构建一个程序,该程序应该判断文本文件中的单词列表是否都是唯一的,或者是否存在使用HashSet的重复项。如果有重复,则唯一的输出应为" NOT_UNIQUE",如果没有重复,则输出应为" UNIQUE"。
我认为这样做的方法是将文件中的单词添加到HashSet中,如果不能添加单词,那是因为该单词是重复的。我已经开始构建程序,但程序输出" UNIQUE"对于每个单词而不是仅仅在程序结束时进行一次。我认为这与我使用while循环和infile.readLine()有关,但我不知道还有什么可以做的。谢谢您的帮助。我的代码如下:
import java.io.*;
import java.util.*;
public class Lab5
{
public static void main (String[] args) throws Exception
{
HashSet<String> set = new HashSet<String>();
BufferedReader infile = new BufferedReader( new FileReader( args[0] ) );
while ( infile.ready() )
{
String word = infile.readLine();
if ( !set.add(word) )
System.out.println("NOT_UNIQUE \n");
else
System.out.println("UNIQUE \n");
}
}
}
答案 0 :(得分:1)
在UNIQUE
准备好阅读时,在每行阅读时,您正在循环打印NOT_UNIQUE
或BufferedReader
输出,因此它会打印一个值每一行都已被阅读。
你可能想在这里重构你的设计。 以下逻辑仅适用于您希望实际保留从文件中读取的整个数据的情况,否则会有更高效的解决方案(请参阅Max Mammel&#39; s)。
List
(允许重复)Set
在其构造函数中传递List
(将其修剪为一组唯一的String
)答案 1 :(得分:1)
标志不优雅,但在这种情况下,我认为这是一个实用的解决方案。如果你不希望它显示每个单词,你可以设置一个标志和保释:
import java.io.*;
import java.util.*;
public class Lab5
{
public static void main (String[] args) throws Exception
{
boolean isUnique = true;
HashSet<String> set = new HashSet<String>();
BufferedReader infile = new BufferedReader( new FileReader( args[0] ) );
while ( infile.ready() )
{
String word = infile.readLine();
if ( !set.add(word) ) {
isUnique = false;
break;
}
}
System.out.println(isUnique ? "UNIQUE \n" : "NOT_UNIQUE \n");
}
}
如果将文件描述符放入应用程序,请记得关闭文件描述符。