2012-04-12 82 views
1

我試圖找到一種很好的方式來在逐行讀取並行時比較兩個字符串。 我想這樣做,而不使用equals方法或這樣的原因是因爲字符串不完全相同,更準確,我會舉一個例子。Java:在並行讀取行時比較兩個字符串

String s1 = "aaa\nbbb\nccc\ddd" 
String s2 = "aaa\n\rbbb\n\rccc\n\rddd" 

就像你看到兩個字符串的時候,我們正在尋找逐行(雖然不是完全地相等,因爲S2也在它用\ r)具有相同的價值觀。 現在,我知道我可以使用一些刪除方法來清除「\ r」,但由於字符串可能非常大,我寧願逐行循環,一旦字符串不等於打破我的邏輯。 換句話說,我更喜歡僅迭代所需的行,而不是從\ r清理entrie字符串。

編輯:我不是從文件中讀取。這些是簡單的字符串。

任何想法:)?

+0

在比較它們之前,您可以在兩個字符串上執行replaceAll(「\ r \ n」,「\ n」)'。 – 2012-04-12 09:58:50

+0

我解釋了我不想這樣做.. – Popokoko 2012-04-12 13:51:22

+0

我無法想象爲什麼給你寫更多的代碼和性能差異,如果他們是平等的可能會更糟。 – 2012-04-12 14:06:02

回答

5

既然你說的字符串可以非常大,我猜你正在從一個文件中讀取。當您使用BufferedReader並使用方法時,您將逐行讀取,不含行分隔符。現在,您可以使用equals()

BufferedReader reader1 = ...; // depends on your source 
BufferedReader reader2 = ...; // depends on your source 

String line1 = null; 
String line2 = null; 

while ((line1 = reader1.readLine()) != null && (line2 = reader2.readLine()) != null) 
{ 
    if (line1.equals(line2)) 
    { 

    } 
} 
+0

謝謝你的答案,但我不是從一個文件讀取,另外,你可以擴展如何通過並行來完成嗎? – Popokoko 2012-04-12 09:08:03

+0

那麼,String從哪裏來? – 2012-04-12 09:08:39

+0

它正在使用PrintStream對象生成。順便說一句,如果我使用BufferedReader就像你建議的那樣,它會是一個「大垃圾」嗎? – Popokoko 2012-04-12 09:14:21

2

您可以創建兩個BufferedReader對象,每個對象一個,逐行讀取並比較表示一行的字符串。 BufferedReader.readLine()方法自動去除行尾字符(它們不會被添加到返回的字符串中)。

BufferedReader br1 = new BufferedReader(new StringReader(s1));是如何獲得緩衝讀取器創建的。