2016-10-14 2 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 파일에서 여러 문자열 검색 (자바)

동안 ((sCurrentLine2 = br2.readLine())! = null이)

이 라인에 있다고 생각합니다. 내 목록에 5 000 개가 넘는 항목이 있으며 내 txt 파일에있는 항목을 비교해야합니다. 내 응용 프로그램을 실행하면 for 루프는 첫 번째 항목 만 가져옵니다. 코드가 제대로 작동하도록 수정하려면 어떻게해야합니까? 어떤 도움을 주셔서 감사합니다.

답변

0

누구나 내 조언을 줄 수 있습니다. 왜 내 FOR 루프는 내 첫 번째 항목 만 사용하여 내 id_linky_list를 종료합니까? 먼저 i = 0 다음 호출은 파일 내용으로 아무것도 할 때입니다 아직 br2.readLine()null을 반환 읽을 된 호출 할 때 루프 while ((sCurrentLine2 = br2.readLine()) != null)에 전체 파일을 읽을 수 있기 때문에 단순히

.

제대로 작동하려면 코드를 어떻게 수정해야합니까?

당신은

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

forwhile로 다음 루프를 반전 할 필요가 더 나은 공연은 List의 단어를 저장하고 간단하게 확인하는 대신 Set 사용을 고려 얻으려면 주어진 단어의 경우 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 고맙습니다. 다른 패키지에서 잘못된 '파일'을 가져 왔습니다. 업데이트 된 답변 – Saravana

관련 문제