Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何验证哈希表中是否已存在字符串?JAVA_Java_Arraylist_Hashtable - Fatal编程技术网

如何验证哈希表中是否已存在字符串?JAVA

如何验证哈希表中是否已存在字符串?JAVA,java,arraylist,hashtable,Java,Arraylist,Hashtable,我有以下情况:我试图在ArrayList上循环,并将每个元素与哈希表进行比较。如果元素字符串相等,我想将其复制到新的哈希表neu中。在这之前一切都很顺利。 但是我想,如果这个词已经在新的哈希表neu中,不要再把它放在一起,简单地给表示频率的值加上一个计数。 我假设在这段代码中永远不会到达else块,因为测试输出永远不会显示它。 我知道,在contentEquals之前,它工作得很好,在那里它会返回所有相等的单词 那么:如何验证字符串是否已经在哈希表中?我希望它不是重复的,我已经看到了很多类似的问

我有以下情况:我试图在ArrayList上循环,并将每个元素与哈希表进行比较。如果元素字符串相等,我想将其复制到新的哈希表neu中。在这之前一切都很顺利。 但是我想,如果这个词已经在新的哈希表neu中,不要再把它放在一起,简单地给表示频率的值加上一个计数。 我假设在这段代码中永远不会到达else块,因为测试输出永远不会显示它。 我知道,在contentEquals之前,它工作得很好,在那里它会返回所有相等的单词

那么:如何验证字符串是否已经在哈希表中?我希望它不是重复的,我已经看到了很多类似的问题,但不知道如何在我的代码中正确使用它

Hashtable<String, Long> neu = new Hashtable<String, Long>();
ArrayList<String> words = new ArrayList<String>();
Hashtable<String, Long> count = new Hashtable<String, Long>();

// adding input

for (String s : count.keySet()) { 

    for (String x : words) {
            if (x.contentEquals(s)) {  
                if (!neu.containsKey(s)) {  
                    neu.put(s, (long) 1);
                } else { 
                    long p = neu.get(s); 
                    p = p + 1;
                    neu.put(s, p);
                    System.out.println("test");
                }
            }
        }
用词:

        BufferedReader br = new BufferedReader(new FileReader("outagain.txt")); 
for (String line = br.readLine(); line != null; line = br.readLine()) {
        String h[] = line.split("   ");

        words.add(h[0].toString());

    }
使用该方法检查给定的键是否已在哈希表中

static Hashtable<String, Long> map = new Hashtable<String, Long>();

    public static void main(String[] args)
    {
        map.put("test", 1l);

        System.out.println(map.containsKey("test")); // true
    }

请核实一下你的话的内容并数一数。这应该是问题所在,因为您的代码工作正常。

我可以管理它!我认为故障实际上是从输入开始的,没有重复的地方,因为这个原因,没有到达其他地方!我只是消除了这种情况,稍微改变了一下结构。 无论如何,谢谢大家的努力!:

for (String x : hash.keySet()) {
        long neu = hash.get(x);
        for (String s : words) {
            if (x.equals(s)) {
                neuS.add(x);
                neuZ.add(neu);
                disc = disc + 1;
            }
        }
    }

不要猜测,而是使用调试器,甚至在代码中添加跟踪,以了解执行了什么和没有执行什么。为什么要使用contentEqualsCharsequence而不是equalsObject?如果代码中的contentEquals是正确的,那么代码在我看来很好。可能是您正在使用的数据不包含重复项,这就是为什么“测试”无法打印的原因我认为ContainesKey是您问题的答案,您已经在使用它了。所以我不明白这个问题是关于什么的。请核实一下你的话的内容,然后数一数。这应该是问题所在,因为您的代码运行良好;在neu.containsKeys中,但是谢谢:DCode对我来说很好实际上,我希望contentEquals方法是个问题,但事实并非如此。我认为这是单词和计数变量的内容。在使用字符串时使用equals或equalsIgnoreCase是否有区别?equalsIgnoreCase——顾名思义,不区分大小写。虽然与equals进行比较区分大小写,但这可能是您出现问题的另一个原因,您是否尝试过使用equalsIgnoreCase?equalsIgnoreCase不会改变它。。无论如何,我认为if和else块的问题更多,因为对于equals,它可以很好地检测相等的字符串。
for (String s : count.keySet())
        {
            for (String x : words)
            {
                if (x.equals(s))
                    neu.put(s, neu.containsKey(s) ? neu.get(s) + 1 : 1l);
            }
        }
for (String x : hash.keySet()) {
        long neu = hash.get(x);
        for (String s : words) {
            if (x.equals(s)) {
                neuS.add(x);
                neuZ.add(neu);
                disc = disc + 1;
            }
        }
    }