2013-03-22 97 views
1

我有一個問題,一直困擾着我整整一天。我想讀取文件的一部分,並將其與同一文件的其他部分進行比較。如果我可以得到某種邏輯關於如何收集第一組線並將其與其他組進行比較,然後移動到下一組並與剩餘的組進行比較,直到我將每組相互比較...比較文件的某些部分

我想要完成的是這個閱讀前3條線跳過下一條線與下一條3條線比較,跳過下一條線並與下一條3條線比較,然後移動到第2條3條線並與第3條線比較和第四集等等。那麼,我試圖做的是一樣的東西

for{ int i=0; i < file.lenght; i++ 

    for {int j=0; j=i+1; i++{ 

    }} 

但對於一個txt文件

樣本文件

this is the way to go 
this is not really it 
what did they say it was 
laughing hahahahahahahaa 
are we on the right path 
this is not really it 
what did they say it was 
smiling hahahahahahahaha 
they are way behind 
tell me how to get therr 
home here we come 
hahahahahahahaha they laught 
are we on the right path 
this is not really it 
what did they say it was 
+0

我明白你用言語說什麼,有種的部分 - 你可以說明你正在經歷的文件縮減的週期? – Makoto 2013-03-22 03:36:22

+0

該文件是一個日誌文件,它有幾個部分,表示開始和一些輸出,它說結束,它繼續以該格式直到文件結束。我想要做的就是檢查是否有重複,所以我必須將開始和結束之間的所有輸出相互比較,直到文件結束,以確保沒有重複。 – user2119847 2013-03-22 04:39:35

回答

1

假設文件裝入內存,我會閱讀所有線路,用List Files.readAllLines(path,charset)(Java 7),然後將在列表上進行比較

如果文件太大,則創建一個方法

List<String> readLines(Scanner sc, int nLines) { 
    List<String> list = new ArrayList<>(); 
    for (int i = 0; i < nLines; i++) { 
     list.add(sc.nextLine()); 
    } 
    return list; 
} 

,並用它來讀/跳過文件

Scanner sc = new Scanner(new File("path")); 
List<String> list1 = readLines(sc, 3); 
readLines(sc, 1); 
List<String> list2 = readLines(sc, 3); 
boolean res = list1.equals(list2) 
+0

該文件將過多,但要全部讀取記憶有沒有其他辦法可以解決它? – user2119847 2013-03-22 04:40:35

+0

好吧,看到更新的答案 – 2013-03-22 04:57:10

+0

,這是非常有用的,但通過文件,我發現他們不是所有3行之前的跳過,有些有4和一些是6行之前,我跳過任何想法 – user2119847 2013-03-22 19:11:55