2012-04-12 25 views
1

2行を並行して読み込むときに2つの文字列を比較する良い方法を見つけようとしています。 これは、文字列が正確に同じではないため、equalsメソッドなどを使用しないで行いたいのですが、もっと正確にするために例を挙げます。 (s2はまたそれで\ rとしているので、completly等しくないが)Java:並行して1行ずつ読むときに2つの文字列を比較する

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

uは両方の文字列を見ることができるように、我々は行ずつ見ているときに、同じ値を持っています。 今、私はいくつかの削除メソッドを使用して "\ r"を消去することができますが、文字列が非常に大きくなる可能性があるので、行ごとにループを行い、 言い換えれば、私は、\ rからentrie文字列を削除するのではなく、必要な行だけを繰り返す方が好きです。

編集中:私はファイルから読んでいません。これらは普通の文字列です。

アイデア:)?

+0

両方の文字列で 'replaceAll(" \ r \ n "、" \ n ")'を実行して比較することができます。 –

+0

私はそれをしたくないと説明しました。 – Popokoko

+0

なぜなら、より多くのコードを書かなければならない理由と、それらが同等であればパフォーマンスの差が悪化することは想像できません。 –

答えて

5

文字列が非常に大きくなる可能性があるので、ファイルから読み込んでいると思います。 BufferedReaderを使用してreadLine();メソッドを使用すると、行区切り文字なしで1行ずつ表示されます。今、あなたは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

URの回答ありがとう、私はファイルから読んでいない、また、どのように並列で行うことができます展開することができますか? – Popokoko

+0

それで、文字列はどこから来ましたか? –

+0

PrintStreamオブジェクトで生成されています。 Btw、私が提案したようなBufferedReaderを使用すると、それは "大きな浪費"になるでしょうか? – Popokoko

2

バッファリングされたオブジェクトを作成するには、各文字列に1つずつ、行単位で読み込み、行を表す文字列を比較します。 BufferedReader.readLine()メソッドは、行末の文字を自動的に取り除きます(返される文字列には追加されません)。

BufferedReader br1 =新しいBufferedReader(新しいStringReader(s1));バッファリングされたリーダーを作成する方法です。

関連する問題