首先,我很抱歉,如果之前有过类似的问题,但我找不到我想要的解决方案。所以我有一个小的java程序,它比较两个文本文件(text1.txt& text2.txt)并打印text2.txt中不存在的text1.txt的所有单词。下面的代码完成了这项工作:
text1.txt :这是文本文件1. some @ random - text
text2.txt :这是文本文件2.
Pi ~ 2.611200
(在新行中打印单词)
输出:@,some,random,1。
我正在尝试按字母顺序打印所有单词。并且如果可能的话,它不应该打印任何专门的字符(@, - 或数字)。我一直想弄清楚但没有运气。如果有人可以帮助我,我会很感激。
此外,我从互联网上采取了以下代码,我并不熟悉。有没有其他更简单的方法来放置这行代码:
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.*;
public class Read {
public static void main(String[] args) {
Set<String> textFile1 = readFiles("text1.txt");
Set<String> textFile2 = readFiles("text2.txt");
for (String t : textFile1) {
if (!textFile2.contains(t)) {
System.out.println(t);
}}}
public static Set<String> readFiles(String filename)
{
Set<String> words = new HashSet<String>();
try {
for (String line : Files.readAllLines(new File(filename).toPath(), Charset.defaultCharset())) {
String[] split = line.split("\\s+");
for (String word : split) {
words.add(word.toLowerCase());
}}}
catch (IOException e) {
System.out.println(e);
}
return words;
}
}
编辑:HashSet是这项工作的必备条件。对不起,我忘了 提到那个。
答案 0 :(得分:0)
您是否查看了其他任何Set
实施?我认为如果您使用SortedSet
而不是TreeSet
,而不是HashSet
,则这些字词会自动按字母顺序排列。
Stack Overflow会更好。
答案 1 :(得分:0)
由于不允许使用TreeSet并强制使用HashSet,所以这样做
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.*;
public class Read {
public static void main(String[] args) {
Set<String> textFile1 = readFiles("text1.txt");
Set<String> textFile2 = readFiles("text2.txt");
Set<String> difference = new HashSet<String>();
// collect strings by dropping out every string that's not only letters
// using the regex "[a-zA-Z]+"
for (String t : textFile1) {
if (!textFile2.contains(t) && t.matches("[a-zA-Z]+")) {
difference.add(t);
}
}
// sort
List<String> dList = new ArrayList<String>(difference);
Collections.sort(dList);
// show
for (String s : dList) {
System.out.println(s);
}
}
public static Set<String> readFiles(String filename)
{
Set<String> words = new HashSet<String>();
try {
for (String line : Files.readAllLines(new File(filename).toPath(), Charset.defaultCharset())) {
String[] split = line.split("\\s+");
for (String word : split) {
words.add(word.toLowerCase());
}}}
catch (IOException e) {
System.out.println(e);
}
return words;
}
}
答案 2 :(得分:0)
从我在java文档中读到的内容,HashSet并不保证对集合中的元素进行排序。但是,如果您要实现为SortedSet,它应该允许对元素进行排序,但您可能也需要为它做一个比较器。
至于你的其他问题,对于阅读java中的文件,我发现geeks中的this guide非常用户友好,特别是初学者,并且显示了多种读取文件的方法。
特殊字符可能有点棘手,但是之前的Stack Overflow答案中有一个指南here可能会有所帮助。