2013-01-02 101 views
0

我有一個包含所有NCAA分部1冠軍賽自1933年以來的文本文件閱讀,Java的掃描器類useDelimiter方法

文件的格式如下:1939年:維拉諾瓦:42:布朗:30 1945:紐約大學:70:俄亥俄州立大學:65 * *一些大學擁有多個空格的事實給我帶來了很多麻煩,因爲我們只能讀取學校名稱並捨棄年份,分數和冒號。我不知道是否必須使用分隔符來丟棄什麼空格,但是按照我的意思,我是一個非常迷茫的人。

我們將放棄日期,點數和「:」。我稍微與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

如果你一定想使用掃描儀,你應該使用冒號作爲分隔符('in.useDelimiter(「:」);')。否則,我同意下面回答的人,使用String.split可能更簡單。 – Alderath

+0

我想知道如果你想看看使用正則表達式。 [檢查這是用於php,但概念保持不變。](http://forums.devnetwork.net/viewtopic.php?f=38&t=33147) –

回答

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]; 
}