我目前正在玩java,我想知道是否可以从几个文件中读取,然后从所有文件中按字母顺序对内容进行排序?
如果有可能,我可以整行,并根据第一个短语对其进行排序?
示例:
此,
ECE3111 A- 4.00
ECE3031 A- 4.00
CS1003 B + 4.00
会返回此内容,
CS1003 B + 4.00
ECE 3031 A- 4.00
ECE3111 A- 4.00
名称的长度总是为6到8,那么有没有办法只根据字符串中前n个位数对行进行排序?
任何提示都将不胜感激。
答案 0 :(得分:2)
是的,有可能。为此,您需要遵循以下一般流程:
list
以存储BufferedReader
),逐行存储到列表中Java
' Collections
库Collections.sort(Collection<T> c)
本地完成首先,创建您的列表:
List<String> lines = new ArrayList<String>();
在我们阅读文件时,我们会将每行添加到此list
,以便我们可以存储,排序并稍后输出。接下来,我们需要读入每个文件并存储它。可以在here找到一个在java中逐行读取文件的好指南。我将使用BufferedReader
和前一个链接中的技术使用1个文件执行此操作。您可以通过循环遍历需要读取的文件列表来执行多个文件。
BufferedReader fileReader = new BufferedReader(new FileReader("text.txt")); // Create reader with access to file
String fileLine = fileReader.readLine(); // Read the first line
while (fileLine != null) { // While there are still lines to read, keep reading
lines.add(fileLine); // Store the current line
fileLine = fileReader.readLine(); // Grab the next line
}
fileReader.close(); // Read all the lines, so close the read
以上代码将读取文件text.txt
中的每一行,并将其添加到创建的list
中。现在我们可以使用Java
Collections
库,并使用它对list
行进行排序。这可以通过调用Collections.sort(obj)
来完成。因此,使用我们的代码,我们称之为:
Collections.sort(lines);
现在,在我们的lines
列表变量中,我们读取了文件中所有行的已排序list
。现在,您可以使用此排序list
执行任何操作!我决定只输出它。
for(String line : lines){
System.out.println(line);
}
完整的代码是:
public static void main(String[] args) throws Exception {
List<String> lines = new ArrayList<String>();
BufferedReader fileReader = new BufferedReader(new FileReader("text.txt")); // Create reader with access to file
String fileLine = fileReader.readLine(); // Read the first line
while (fileLine != null) { // While there are still lines to read, keep reading
lines.add(fileLine); // Store the current line
fileLine = fileReader.readLine(); // Grab the next line
}
fileReader.close(); // Read all the lines, so close the read
Collections.sort(lines);
for(String line : lines){
System.out.println(line);
}
}
我在包含以下内容的文件text.txt
上运行此代码:
ECE3111 A- 4.00
ECE3031 A- 4.00
CS1003 B+ 4.00
我得到了输出:
CS1003 B+ 4.00
ECE3031 A- 4.00
ECE3111 A- 4.00
要获取目录中的所有文件,我们可以创建代表文件名称的list
个String
个变量。然后,遍历目录中的所有文件,并检查它们是否以您要查找的扩展名结束。
List<String> textFileNames = new ArrayList<String>();
File directory= new File("StackTxtFiles"); // Point to your directory you want to search
for (File file : directory.listFiles()) // Loop over everything that exists in the directory
{
if (file.getName().endsWith(".txt")) // if the extension is ".txt", it's a text file so we should include it
{
textFileNames.add(file.getName()); // Add the file's name to the included list
}
}
然后,在用于读取文件的代码中,将其放在循环遍历textFileNames
list
的循环内,并使用String
变量作为传递给{{的文件名1}}而不是硬编码的值。
FileReader
答案 1 :(得分:0)
是的,这是可能的。
我建议将所有字符串加载到ArrayList<String>
,调用Collections.sort(<List name>);
,然后使用增强的for
循环将其写入您选择的文件。
希望这有帮助!
答案 2 :(得分:0)
您可以将TreeSet与您选择的比较器一起使用。
所以Set A可以有一个比较器来比较整个单词。
Set B可以有一个比较器,只比较单词的前3个字母(子串)。
然后你只需遍历文件,将它们添加到你的集合中,然后就完成了。