2016-10-14 15 views
0
BufferedReader br2 = new BufferedReader(
    new InputStreamReader(new FileInputStream(id_zastavky), "windows-1250") 
); 

for (int i = 0; i < id_linky_list.size(); i++) 
{ 
    while ((sCurrentLine2 = br2.readLine()) != null) 
     { 
     String pom = id_linky_list.get(i);      
     String[] result = sCurrentLine2.split("\\|"); 
     if((result[1].toString()).equals(pom.toString())) 
     { 
      System.out.println(result[1].toString()+" " +pom.toString() + " " + result[3]); 
     } 
     } 
} 
br2.close(); 

ねえ、誰でも私のアドバイスを与えることができますなぜ私のFORループは私のid_linky_listの最初の項目だけを使用して終了し、それから終了しますか?私はこの問題はtxtファイル内の複数文字列検索(java)

しばらく((sCurrentLine2 = br2.readLine())!= null)の

このライン上にあると思います。私は私のリストに5 000以上の項目があり、それらが私のtxtファイルに存在する場合、それらを比較する必要があります。私のアプリケーションを実行する場合、forループは最初の項目を取るだけです。コードを正しく修正するにはどうしたらよいですか?何か助けてくれてありがとう。

答えて

0

誰も私のアドバイスを与えることができますなぜ私のFORループは の最初の項目だけを使用して私のid_linky_listを終了しますか?あなたが最初のファイルの内容がすでにbr2.readLine()nullを返しますので、読まれているようi = 0次の呼び出しは何もしないだろうときであるそれを呼び出すときにループwhile ((sCurrentLine2 = br2.readLine()) != null)であなたのファイル全体を読み込むというだけの理由

正常に動作するようにコードを変更するにはどうすればよいですか?あなたがより良い性能があなたの言葉を保存し、単に与えられた単語をかどうかを確認するためにSet代わりのListを使用することを検討して取得するには

while ((sCurrentLine2 = br2.readLine()) != null) 
{ 
    for (int i = 0; i < id_linky_list.size(); i++) 
    { 

として、次のループforwhileを反転する必要が

Listを反復する代わりに、contains(object)というメソッドを使用して存在します。

1

forループの最初の反復中に、ファイル全体が読み取られ、br2.readLine()は次の反復で常にnullを返します。その代わりの

ファイルサイズが小さい場合は、マップを構築することができ、あなたがコンテンツに

File file = new File("filename"); 
    List<String> lines = Files.linesOf(file, Charset.defaultCharset()); 
    Map<String, List<String>> map = lines.stream().collect(Collectors.groupingBy(line -> line.split("\\|")[1])); 
    List<String> id_linky_list = null; 
    for (int i = 0; i < id_linky_list.size(); i++) { 
     if (map.get(id_linky_list.get(i)) != null) { 
      //sysout 
     } 
    } 

をチェックするために、そのマップを使用することができます更新

Map<String, List<String>> text = Files.lines(file.toPath(), Charset.forName("windows-1250")).collect(Collectors.groupingBy(line -> line.split("\\|")[1])); 
+0

'ストリームライン=ファイル.lines(file.toPath()、Charset.from( "windows-1250")); 'linesOf'または' readAllLines'の代わりに。 –

+0

@JoopEggenありがとう、私は間違った 'Files'を他のパッケージからインポートしました。 – Saravana

関連する問題