2


1

Hashtable <String、Object>は文字列を見つけられません

Hashtable型のHashtableがあります

いくつかの文字列をキーとしてロードしました。そのうちの1つは「ABCD」です

ただし、後で「ABCD」を検索すると、Hashtableは関連オブジェクトではなくnullを返します。 さらに、キーセットには「ABCD」が含まれていますが、containsKey(「ABCD」)へのリクエストはfalseを返します。

これは、Stringオブジェクトが本質的に異なるオブジェクトであるためですか?

もしそうなら、文字列をキーとして使用したい場合、ハッシュテーブルに情報を保存する書き込み方法は何ですか?

 public class Field {
        private String name;
        private DataType dataType;

        public Field(String name, DataType dataType) {
            this.name = name;
            this.dataType = dataType;
        }

        public String getName() {
            return name;
        }

        public DataType getDataType() {
            return dataType;
        }

        public String toString() {
            return name;
        }
    }

public class Record {
        private Hashtable content;

        public Record(Field[] fieldList) {
            this.fieldList = fieldList;
            content = new Hashtable();

            System.out.println(fieldList.length);

            for(Field f : fieldList) {
                content.put(f.getName(), new Data());
            }
        }

        public void add(String field, String s) {
                    // ERROR OCCURS HERE IN THIS METHOD !!!

            System.out.println(field);

            for(String ss : content.keySet()) {
                System.out.print(" [ " + ss + " ] ");
            }
            System.out.println();

            System.out.println(content.containsKey(field));
            System.out.println(content.get(field));

            content.get(field).add(s);
        }
}



public class Data {

    private Vector lines;
    private int index;

    public Data() {
        lines = new Vector();
        index = 0;
    }

    public void add(String s) {
        System.out.println("adding");
        lines.add(s);
    }

    public String nextLine() {
        try {
            return lines.elementAt(index++);
        } catch (ArrayIndexOutOfBoundsException aioobe) {
            return null;
        }
    }
}

4 Answer


8


私のために働く!

import java.util.Hashtable;

public class StrMap {
    public static void main(String[] args) {
        Hashtable map = new Hashtable();
        map.put("ABCD", "value");
        System.err.println(map.containsKey("ABCD"));
    }
}

おそらく他のエラーが発生した可能性があります。 問題を、それでも問題を示す最小の完全なコンパイル可能なプログラムに減らします。 おそらくすぐに問題が見つかるでしょう。 そうでない場合、少なくともあなたは私たちが答えることができる質問をするでしょう。

(また、「Map」と「HashMap」もその方法です。 `Hashtable`は、Java 2以前のAPIを使用している場合に便利です(Java 2は10年以上も前から快適に使用できます!)。


0


HashtableはJava 1.0データ構造です。 なぜマップを使用していないのでしょうか?

java.lang.Stringがキータイプである場合、コードを投稿しないと推測できない他の何かに夢中になっていると思います。


0


あなたの側からhttp://sscce.org [SSCCE]なしで根本原因を特定するのは難しいです。

少なくとも、一般的な原因は次のとおりです。

  1. 使用していると思われる「ハッシュテーブル」を使用していません。 `System.out.println()`で確認します。

  2. String`は実際には別のケースにあります。 代わりに `" ABcD " " ABCD "

  3. String`はいくつかの空白で囲まれています。 http://java.sun.com/javase/6/docs/api/java/lang/String.html#trim%28%29 [`trim()]最初に。

とはいえ(実際の問​​題とは無関係)、レガシーの Hashtable`ではなく、改良されたhttp:// v [ HashMap`]を使用することを強くお勧めします。 http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html [地図に関するSunのチュートリアル]


0


フィールドが「ABCD」の場合、次のメソッドから取得した正確な出力を投稿できますか?

   public void add(String field, String s) {
                // ERROR OCCURS HERE IN THIS METHOD !!!

        System.out.println(field);

        for(String ss : content.keySet()) {
            System.out.print(" [ " + ss + " ] ");
        }
        System.out.println();

        System.out.println(content.containsKey(field));
        System.out.println(content.get(field));

        content.get(field).add(s);
    }