在Java中扫描时忽略文本文件中的数字

时间:2016-04-24 19:52:07

标签: java hashset

我正在用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());
    }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试使用StreamTokenizer(java.io)类来读取文件。它会将您的文件拆分为令牌,并提供令牌类型,如字符串值,双数据类型的数字值,文件结尾,行尾。这样您就可以轻松识别String令牌。 你可以在这里找到细节 http://docs.oracle.com/javase/6/docs/api/java/io/StreamTokenizer.html

答案 1 :(得分:0)

您还可以使用正则表达式替换所有数字(如果需要,还可以使用更多特殊字符)

testStr = testStr.replaceAll("\\d","");