2012-10-22 3 views
-2

나는 CSV 파일을 읽고 그 내용을 해시 맵에 저장하고 해시 맵에서 특정 키의 존재를 확인하려고한다. 여기 해시 맵에 elemets를 입력하고 특정 키가 있는지 확인하는 방법은 무엇입니까?

내 코드입니다, 내가 잘못 어디에서 당신이지도를 채우는되는이 outside the loop을해야 내 실수

import java.io.*; 

import java.text.SimpleDateFormat; 

import java.util.*; 

public class PoolCsv { 

    public static void main(String[] args) { 

     try { 

      Calendar currentdate = Calendar.getInstance(); 
      SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); 
      String presdate = dateformat.format(currentdate.getTime()); 
      currentdate.add(Calendar.DAY_OF_YEAR, 4); 
      String futdate = dateformat.format(currentdate.getTime()); 
      System.out.println(presdate); 
      System.out.println(futdate); 
      String poolcsv = "D:\\pool_items.csv"; 
      BufferedReader br = new BufferedReader(new FileReader(poolcsv)); 
      String lines = null; 
      String[] tokens = null; 
      String startdate = null; 
      String enddate = null; 
      HashMap<String, String> hash = new HashMap<String, String>(); 
      while ((lines = br.readLine()) != null) { 
       tokens = lines.split(","); 
       for (int i = 0; i <= tokens.length; i++) { 
        startdate = tokens[5]; 
        enddate = tokens[6]; 
       } 

       hash.put(startdate, enddate); 

       boolean flag = hash.containsKey(presdate); 
       if (flag) { 
        System.out.println("value exists"); 
       } 
      } 

     } catch (IOException io) { 
      System.out.println(io); 
     } 
    } 
} 
+2

당신이하고있는 것처럼 : 요소를 추가하기 위해'put', 키가 존재 하는지를 확인하기 위해'containsKey'를 사용합니다 .... 당신은 무엇을 묻고 있습니까? – assylias

+0

아무 것도 if 조건 안에서 작동하지 않는 것 같습니다 – user1690973

답변

2
boolean flag = hash.containsKey(presdate); 
if(flag){ 
    System.out.println("value exists"); 
} 

을 알아낼 수 개미 있어요 때문에 알려 주시기 바랍니다.

+0

if 조건 내에서 아무것도 실행되지 않습니다 – user1690973

+0

'presdate'가 해시 맵에 있는지 확인하십시오? 입력 내용이 다른 형식이거나 현재 날짜에 대한 입력이없는 경우 containsKey()가 false를 반환해야합니다. –

+0

예, 파일에 현재 날짜가있는 항목이 있습니다 – user1690973

0

정확히 무엇을하고 싶은지 모르겠지만 FOR 루프는 매우 드뭅니다. 모든 토큰을 반복하고 있지만, 항상 5와 6의 위치를 ​​얻으므로 여기에는 필요가 없습니다. 모든 토큰에서 두 위치를 얻으십시오.

 while ((lines = br.readLine()) != null) { 
      tokens = lines.split(","); 
      //I dont think you neeed this for. 
      for (int i = 0; i <= tokens.length; i++) { 
       startdate = tokens[5]; 
       enddate = tokens[6]; 
      } 

      hash.put(startdate, enddate); 

      boolean flag = hash.containsKey(presdate); 
      if (flag) { 
       System.out.println("value exists"); 
      } 
     } 

presdate 및 startdate를 인쇄하면 두 문자열의 형식이 동일 할 수도 있습니다. yyyy-MM-dd (구분 기호에 유의하십시오.) 문자열은 실제로 같기 때문에 ContainsKey는 해당 키를지도에서 찾을 수 있습니다.

관련 문제