我的程序有问题。我应该做的是:
- 从某些 TXT 文件中查找所有单词
- 每个单词仅在数组中存储一次
- 然后按字母顺序排序
我不知道如何确保每个单词不会在我的数组中出现两次(或更多)。例如,我的一个文件中的一句话:我的猫很大,我的狗很懒。我希望单词"my"和"is"在我的数组中只出现一次,而不是两次。
至于排序,我可以从 Java 中使用什么吗?我不知道。
任何帮助不胜感激!
这是我到目前为止所做的:
try {
File dir = new File("path of folder that contains my files")
for (File f : dir.listFiles()) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String line = null;
while((line = br.readLine())!= null) {
String [] tokens = line.split(",\s+|\s*\"\s*|\s+|\.\s*|\s*\:\s*");
}
}
}
以下是对唯一单词进行排序的修改代码:
try {
TreeSet<String> uniqueSortedWords = new TreeSet<String>();
File dir = new File(
"words.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(dir)));
String line = null;
while ((line = br.readLine()) != null) {
String[] tokens = line
.split(",\s+|\s*\"\s*|\s+|\.\s*|\s*\:\s*");
for(String token: tokens) {
uniqueSortedWords.add(token);
}
}
System.out.println(uniqueSortedWords);
//call uniqueSortedWords.toArray() to have output in an array
} catch (Exception e) {
e.printStackTrace();
}
如果我猜你正在寻找这样的代码。
try {
ArrayList<String> list = new ArrayList<String>();
File dir = new File("path of folder that contains my files")
for (File f : dir.listFiles()) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
String line = null;
while((line = br.readLine())!= null) {
String [] tokens = line.split(",\s+|\s*\"\s*|\s+|\.\s*|\s*\:\s*");
for(int i=0; i<tokens.length(); i++)
{ //Adding non-duplicates to arraylist
if (!list.contains(tokens[i])
{
list.add(tokens[i]);
}
}
}
Collections.Sort(list);
}
}
catch(Exception ex){}
不要忘记:import java.util.*;
代码开头使用 Collections.Sort();
编辑
尽管 contains 是一个内置方法,您可以直接与 ArrayList 一起使用,但这种方法实际上是这样工作的(以防万一,如果你好奇的话):
public static boolean ifContains(ArrayList<String> list, String name) {
for (String item : list) {
if (item.getName().equals(name)) {
return true;
}
}
return false;
}
然后调用它:
ifContains(list, tokens[i]))
您可以使用 HashSet 和 TreeSet 的组合
- Hashset:hashset 允许空对象。 树集:树集
- 不允许空对象,树集元素默认按升序排序。
HashSet 和 TreeSet 都不保存重复的元素。
try { Set<String> list = new HashSet<>(); File f = new File("data.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); String line = null; while ((line = br.readLine()) != null) { String[] tokens = line.split(",\s+|\s*\"\s*|\s+|\.\s*|\s*\:\s*");// other alternative:line.split("[,;-!]") for (String token : tokens) { list.add(token); } } // Add the list to treeSet;Elements in treeSet are sorted // Note: words must have the same case either lowercase or uppercase // for sorting to work correctly TreeSet<String> sortedSet = new TreeSet<>(); sortedSet.addAll(list); Iterator<String> ite = sortedSet.iterator(); while (ite.hasNext()) { System.out.println(ite.next()); } } catch (Exception e) { e.printStackTrace(); }