Hashmap问题从Java文件中添加字符串

Panagiss:

我在将字符串添加到Java的哈希图中时遇到问题。我的文件包含在以下内容中

在此处输入图片说明

最上面有注释,此后每行有两个数字。我想删除注释或忽略它们,并将每个数字仅设置一次到哈希图中,因此我必须检查是否重新出现。我在下面编写了代码,但计数有问题。有时是随机的。我设置了一个静态计数器“ mapcounter”,它是每次插入键后我加一的地图的值。这是代码:

    String line = filemap.nextLine();
    while(filemap.hasNextLine()) {

        if(!line.startsWith("#")) {
            String word[]=new String[2];
            word[0]=filemap.next();
            word[1]=filemap.next();

            if(!map.containsKey(word[0])){
                map.put(word[0],mapcounter++);
            }
            if(!map.containsKey(word[1])){
                map.put(word[1],mapcounter++);
            }
        }
        line = filemap.nextLine();
    }

其他一些细节。我使用扫描仪打开文件,我们的文件指针为“ filemap”。我把数字当作字符串!有地图的键,因此当我打印键“ 30”的值时,我得到正确的0,因为它是要添加的第一个键。当我检查键“ 1412”的值时,我得到一个类似500+的数字。而且我不知道为什么,对于键“ 3”,我也得到了值6。

额外说明:我想将两列中的每个不同的Number保留在哈希图中,以便为它们安排一个值。从0到1,2,3,4,5,.......,1890,.....等等。像30 = 0、1412 = 1、3352 = 2、5254 = 3、5543 = 4,7478 = 5,3 = 6等等。如果再次出现键,我想忽略它,因为已经有一个值。我也想保留第二列,而不仅仅是第一列。这就是为什么我有字[2]谢谢您的帮助

WJS:

基于评论中提供的新信息。

给定一个

 Map<String, Integer> map = new HashMap<>();

您可以读取两个值并根据它们的出现更新计数器

        int mapcounter = 0;
        String line = filemap.nextLine();
        while(filemap.hasNextLine()) {
            if(!line.startsWith("#")) {

               // split the two node column into two values.
                String[] words = line.split("\\s+");

                if(!map.containsKey(word[0])){
                    map.put(word[0],mapcounter++);
                }
                if(!map.containsKey(word[1])){
                    map.put(word[1],mapcounter++);
                }
            }
            line = filemap.nextLine();
        }

在我的第一个答案中,我完全误解了您想要的东西。您的解决方案很好,除了您的两个next()语句。您需要消除它们并替换为a,String.split以将行分成两个单词。\\s+是一个正则表达式,在一个或多个空格分割。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章