Java Scanner类useDelimiter方法

时间:2013-01-02 15:44:32

标签: java

我必须阅读包含自1933年以来所有NCAA Division 1冠军赛的文本文件,

文件采用以下格式:1939:Villanova:42:布朗:30                          1945年:纽约大学:70:俄亥俄州立大学:65 * *一些大学有多个空格的事实给我带来了很多麻烦因为我们只是阅读学校名称并丢弃年份,分数和冒号。我不知道是否必须使用分隔符来丢弃什么空格,但是buttom line是我非常迷失。

我们要丢弃日期,分数和“:”。我与useDelimiter方法略有不同但是,我已经读过.split(“”)可能有用。由于我对模式缺乏了解,我遇到了很多问题。

这就是我所做的:

class NCAATeamTester
{
public static void main(String[]args)throws IOException
{
NCAATeamList myList = new NCAATeamList();     //ArrayList containing teams
Scanner in = new Scanner(new File("ncaa2012.data"));   
in.useDelimiter("[A-Za-z]+");      //String Delimeter excluding non alphabetic chars or ints
while(in.hasNextLine()){
String line = in.nextLine();
String name = in.next(line); 
String losingTeam = in.next(line);
//Creating team object with winning team 
NCAATeamStats win = new NCAATeamStats(name); 
myList.addToList(win);       //Adds to List
//Creating team object with losing team 
NCAATeamStats lose = new NCAATeamStats(losingTeam);
myList.addToList(lose)
}
}
}

1 个答案:

答案 0 :(得分:1)

怎么样?
String[] spl = line.split(':');
String name1 = spl[1]; 
String name2 = spl[3];

或者,如果同一行中有更多记录,请使用正则表达式:

String line = "1939:Villanova:42:Brown:30   1945:New York University:70:Ohio State:65";

Pattern p = Pattern.compile("(.*?:){4}[0-9]+");
Matcher m = p.matcher(line);

while (m.find())
{
    String[] spl = m.group().split(':');
    String name = spl[1];
    String name2 = spl[3];
}