2010-11-01 96 views
1

我有一個文本文件,每個奇數行保存一個整數(String of course,因爲它在一個文本文件中),偶數行有時間。我只想讀取數字,因此從文本文件中讀取奇數行。我怎麼做?如何使用Java從文本文件讀取奇數行?

import java.io.*; 

public class File { 

BufferedReader in; 
String read; 
int linenum =12; 


public File(){ 
try { 
in = new BufferedReader(new FileReader("MAP_allData.txt")); 

for (linenum=0; linenum<20; linenum++){ 

read = in.readLine(); 
if(read==null){} 
else{ 
System.out.println(read); } 
} 
in.close(); 
}catch(IOException e){ System.out.println("There was a problem:" + e); 

} 
} 

public static void main(String[] args){ 
File File = new File(); 
} 
} 

截至目前,它會讀取所有的(奇數和偶數)行,直到沒有任何更多的從(空)

由於我的偶數行讀的是時間戳像13:44:23所以我可以這樣做

如果(閱讀== null,或者讀取包括 時間或半冒號){}其他{ SOP(讀取);}

回答

2

在你的for關閉之前,你可以簡單地把一個簡單的in.readLine()排除?

即:

for (linenum=0; linenum<20; linenum++) { 

    read = in.readLine(); 
    if(read==null){} 
    else{ 
     System.out.println(read); 
    } 
    in.readLine(); 
} 
+0

謝謝,它的工作原理。 – razshan 2010-11-01 20:37:45

4

閱讀所有行,並忽略其他所有行。

int lineNum = 0; 
String line = null; 
while ((line = reader.readLine()) != null) { 
    lineNum++; 
if (lineNum % 2 == 0) continue; 
    //else deal with it 
} 

或者只是叫readLine()每兩次循環,忽視了第二次,並避免計數器(安全的,因爲所有呼叫READLINE回空的流末尾已到達後)。

編輯如果效率是絕對的關鍵和日期線有一個固定長度格式,你可以使用skip(15)或類似的高效跳過你不關心的線條。

+0

不確定的'while'循環比'for'循環更好! – Philip 2010-11-01 20:04:14

+0

@Philip:說實話,我仍然通常使用for循環來正確範圍'line':'for(String line = null;(line = reader.readLine())!= null;){... 「但是,無論如何,你的觀點是很好的。 – 2010-11-01 20:06:28

0

你已經有一個linecounter,所以如果你想使用所有其他行,使用模校驗

if((linenum % 2) == 1){ 
    System.out.println(read); 
} 
0

就執行這樣的事情每次閱讀時間一行:

String str = read; 
char[] all = str.toCharArray(); 
bool isInt = true; 
for(int i = 0; i < all.length;i++) { 
    if(!Character.isDigit(all[i])) { 
     isInt = false; 
    } 
    else { 
     isInt = true; 
    } 
} 
if isInt { 
    //INTEGER LINE 
} else { 
    //DO SOMETHING WITH THE TIME 
} 

這使得代碼動態。如果文本文件發生更改,而整數出現在不同數字的行上,則代碼可以保持不變。

+0

如果文本文件格式發生變化,我想讓我的代碼中斷。誰知道它實際上是否改變了語義,在這種情況下不會中斷會導致晦澀的錯誤? – 2010-11-01 20:07:32

+1

這一切都取決於我想的領域....只是一種替代方式來看待它。 – Scott 2010-11-01 20:08:57

+0

的確如此。如果是我並且我採取這種方法,我可能會傾向於將該行傳遞給'Integer.parseInt()'或'Integer.valueOf()'並捕獲任何'NumberFormatException'。無論如何,你最終都會想要這樣做,將輸入轉換爲int/Integer。這種方式是冗長而脆弱的。例如,你的方法不允許負數。 – 2010-11-01 20:11:52

相關問題