1

私はファイルを読まなければなりません。ファイルは以下の通りです -

123 http://www.xyz.com

143 http://www.qqq.com

そのファイルをハッシュテーブルに読み込むコードを以下に記述しました。

public Hashtable<String, String> readDataFromFile(String fileName) {
            try {
                FileReader fr = new FileReader(fileName);
                BufferedReader br = new BufferedReader(fr);
                String strLine = null;
                String []prop = null;
                while((strLine = br.readLine()) != null) {
                    prop = strLine.split("\t");
                    recruiters.put(prop[0], prop[1]);
                }
                br.close();
                fr.close();

            }catch(Exception exception) {
                System.out.println("Unable to read data from recruiter file: " + exception.getMessage());
            }
            return recruiters;
        }

この関数は、最初の引数が id で 2 番目の引数がリンクであるハッシュテーブルを返します

ここで、ハッシュテーブルを読み取り、2 番目の引数を最初に追加できる関数を作成したいと考えています。その関数は、結果として合計 URL を返す必要があります。

www.abc.com/123 のようなもの

これが私が始めた方法ですが、うまくいきません..改善を提案してください。

public String readFromHashtable(Hashtable recruiters){

            String url=null;        
            Set<String> keys = hm.keySet();
            for(String key: keys){
                //Reading value and key
                // Appending id into url and returning each of the url.
            }
            return url;

        }
4

1 に答える 1

1

両方の値 (キー + 値) が必要な場合は、 を使用してエントリ を反復処理するのが最も簡単.entrySet()です。

何らかの方法で URL を収集する必要があります。現在のコードではurl、ループが繰り返されるたびに変数を再割り当てするため、最終的には最後の URL のみを返します。

このようなものが動作するはずです:

public List<String> readFromHashtable(Hashtable recruiters){
    List<String> urls = new ArrayList<String>(recruiters.size());      
    for(Entry e : recruiters.entrySet()){
        urls.add(e.getValue() + '/' + e.getKey());
    }
    return urls;
}

また、なぜ HashMap の代わりに HashTable を使用しているのですか? 主な違いは、HashTable は同期 (スレッド化されたアプリケーションに使用) され、HashMap は同期されないことです。HashTable の操作にスレッドを使用していない場合は、HashMap を使用することをお勧めします。

于 2013-08-19T06:38:57.973 に答える