![](/img/trans.png)
[英]How to read a String from a txt file and store it into a char array java
[英]Java: Read from txt file and store each word only once in array + sorting
我的程序有问题。 我应该做的是:
我不知道如何确保每个单词在我的数组中不会出现两次(或更多次)。 例如,我的一个文件中的一句话:我的猫很大,我的狗很懒。 我希望单词“ 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是一个内置方法,您可以直接与ArrayLists一起使用,但实际上这是这样一种方法的工作方式(以防万一,如果您好奇的话):
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和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(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.