2013-10-15 103 views
0

假設我有一個名爲「filename」的txt文件。裏面的數據如下,java:從txt文件中提取點

N 
12 39 
34 23 
12 22 
5 7 
7 10 
11 8 
    . 
    . 
    . 

左欄包含每個點的x值。右列包含每個點的y值。 N是隨後的點數數據。我需要提取所有Point數據並將其存儲在數據結構(如List)中。有什麼辦法可以做到嗎?

+3

你嘗試過什麼嗎?你堅持什麼?讀文件?採摘數據結構?創建/插入數據結構? – Cruncher

+0

在File類中使用Scanner類會讓你有很多方法 –

+0

我嘗試使用Arraylist來存儲這些點,但我不知道如何分隔這兩列並將其分配給x或y一個點的值.. – catchwisdom

回答

2
File file = new File(filepath); 
BufferedReader br = new BufferedReader(file.getInputStream); 
int n = Integer.parseInt(br.readLine()); 

for (int i = 0; i < n-1; i++) // reads n-1 points, if you have n points to read, use n instead of "n-1" 
{ 
    line = br.readLine(); 
    StringTokenizer t = new StringTokenizer(line, " "); 

    int x = Integer.parseInt(t.nextToken()); 
    int y = Integer.parseInt(t.nextToken()); 

    // do whatever with the points 
} 

這將工作這樣的事情作爲一個輸入文件,

3   // line 1 
1 2   // line 2 
3 4   // line 3 
+0

從看這個(我學到了一些新東西,謝謝),它看起來像t.nextToken();無論如何返回一個字符串,所以演員沒有必要 –

+1

請注意,這將違反給定的輸入,因爲它不包括N. –

+0

謝謝,編輯。 –

1

用我的解決方案的Scanner代替BufferedReader/StringTokenizer

Scanner scanner = new Scanner(new File("filename")); 
int n = scanner.nextInt(); 

for (int i = 0; i < n; i++) { 
    int x = scanner.nextInt(); 
    int y = scanner.nextInt(); 

    // do something with the point or store it 
} 

它可能不是那麼快,但閱讀和寫作要容易得多。