-2

csv ファイルを読み取ろうとして、その内容をハッシュ マップに格納し、ハッシュ マップ内の特定のキーの存在を確認しています。

これが私のコードです。間違いを見つけることができないので、どこが間違っているか教えてください

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);
        }
    }
}
4

2 に答える 2

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

これはoutside the loop、マップを作成している場所である必要があります。

于 2012-10-22T15:58:57.717 に答える
0

何をしたいのか正確にはわかりませんが、FOR ループは非常にまれです。すべてのトークンをループしていますが、常に位置 5 と 6 を取得しているため、for は必要ありません。これらの 2 つの位置のみを取得します。すべてのトークンから。

        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 はマップ上でそのキーを見つけることができます。

于 2012-10-22T16:38:11.723 に答える