我正在用Java做作业,要求我们阅读两个不同的文件。一个拥有前1000个男孩名字,另一个包含前1000名女孩名字。我们必须编写一个程序来返回两个文件中的所有名称。我们必须将每个男孩和女孩的名字读作一个字符串,忽略namings的数量,并将其添加到HashSet中。添加到HashSet时,如果要添加的名称已存在于HashSet中,则add方法将返回false。因此,要查找常用名称,您只需跟踪添加时返回的错误名称。我的问题是我无法弄清楚如何忽略每个文件中的namings数量。我的HashSet包含两者,我只想要名字。
这是我到目前为止所拥有的。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Names {
public static void main(String[] args) {
Set<String> boynames = new HashSet<String>();
Set<String> girlnames = new HashSet<String>();
boynames = loadBoynames();
System.out.println(girlnames);
}
private static Set<String> loadBoynames() {
HashSet<String> d = new HashSet<String>();
File names = new File("boynames.txt");
Scanner s = null;
try {
s = new Scanner(names);
} catch (FileNotFoundException e) {
System.out.println("Can't find boy names file.");
System.exit(1);
}
while(s.hasNext()){
String currentName = s.next();
d.add(currentName.toUpperCase());
}
return d;
}
}
我的计划是使用我目前拥有的HashSet并将女孩名称添加到其中,但在此之前我需要在HashSet中没有这些数字。
我尝试使用此代码跳过数字,但它只是吐出错误
while(s.hasNextLine()){
if (s.hasNextInt()){
number = s.nextInt();
}else{
String currentName = s.next();
d.add(currentName.toUpperCase());
}
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
尝试使用StreamTokenizer(java.io)类来读取文件。它会将您的文件拆分为令牌,并提供令牌类型,如字符串值,双数据类型的数字值,文件结尾,行尾。这样您就可以轻松识别String令牌。 你可以在这里找到细节 http://docs.oracle.com/javase/6/docs/api/java/io/StreamTokenizer.html
答案 1 :(得分:0)
您还可以使用正则表达式替换所有数字(如果需要,还可以使用更多特殊字符)
testStr = testStr.replaceAll("\\d","");