无法在地图java中插入值

时间:2016-04-13 19:33:07

标签: java hashmap

我试图在java中的地图中插入值以循环它们并进行一些计算,所以我正在做的是读取包含这些东西的11k文件的文件夹:  ps:所有文件都具有相同的结构

 SFrm  EFrm   SegAScr Phone
        0    36   -158051 SIL
       37   105   -644247 +NONTRANS+
      106   109    -96452 l SIL w b
      110   112   -125055 w l aa i
      113   115   -150550 aa w 7 i
      116   118   -146662 7 aa i i
      119   122    -46757 i 7 d i
      123   126    -58440 d i SIL e
      127   146    -90776 +MUSIC+
      147   152    -61098 t SIL u b
      153   158    -67393 u t f i
      159   174   -251284 f u f i
      175   178    -79772 f f aa i
      179   194   -134562 aa f 7 i
      195   206    -33695 7 aa a i
      207   223   -194024 a 7 SIL e
      224   350   -434997 +NOISE+
      351   353    -28280 SIL
 Total score:    -2802095

并通过以下代码检查它们

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

public class z {
//Enum to match the vowels with string values
    public enum Match {
        _aa("aa"), _ii("ii"), _uu("uu");
        public String value;

        private Match(String value) {
            this.value = value;
        }

        public static Match fromString(String s) {
            for (Match m : Match.values()) {
                if (s.substring(4, 6).equals(m.value))
                    return m;
            }

            return null;
        }
    }

    public static void main(String[] args) throws NumberFormatException,
            IOException {

        **//reading folder**
        File folderPhseg = new File(
                "/home/bassem/workspace/outputs/new");
        File[] listOfPhseg = folderPhseg.listFiles();

        Map<Match, List<Integer>> indexes = new HashMap<Match, List<Integer>>();
         for (Match m : Match.values()) {
                    indexes.put(m, new ArrayList<Integer>());
                }
        String line = "";
        for (File file : listOfPhseg) {
            if (file.isFile()) {

                FileReader inputFile = new FileReader(file.getAbsolutePath());
                BufferedReader bufferReader = new BufferedReader(inputFile);
                String[] column1 = new String[100];
                String[] column2 = new String[100];
                String[] column3 = new String[100];
                String[] column4 = new String[100];
                String[] column5 = new String[100];
                int index = 0;
                  //converting it into five arrays
                while ((line = bufferReader.readLine()) != null) {

                    String temp = "";
                    int count = 1;
                    column4[index] = "";
                    // System.out.println(line);
                    StringTokenizer st = new StringTokenizer(line, " ");

                    // String tokenizer gets the token from each space
                    while (st.hasMoreTokens()) {

                        temp = st.nextToken();
                        if (temp.equals("Total")) {
                            break;
                        }
                        // parsing input
                        if (count == 1) {
                            column1[index] = temp;
                        }
                        if (count == 2) {
                            column2[index] = temp;
                        }
                        if (count == 3) {
                            column3[index] = temp;
                        }
                        if (count == 4) {
                            column4[index] = temp;
                        }
                        if (count == 5) {
                            column5[index] += temp;
                        }

                        if (count < 5)
                            count++;
                    }

                }
                    //storing them into Maps

                for (int k = 0; k < index - 1; k++) {
                    String cur = column5[k];
                    Match m = Match.fromString(cur);
                    if (m != null) {
                        indexes.get(m).add(
                                Integer.valueOf(column3[k])
                                        - Integer.valueOf(column2[k]));
                    }
                }

                index++;

            }


        }
        System.out.println(indexes);

    }
}

我使用键Match将这些数据存储到地图中,然后当我尝试打印地图时,我得到一张空的数据!

我在其中一个文件上尝试了这个代码,它对我很有用。 问题是当我尝试将它应用于整个文件夹时,我在地图中什么也得不到。在调试代码后,我发现最后一个for循环没有被执行,这个循环是关于在地图中存储的那个循环,但是我无法弄清楚背后的原因。我试图将index++;移到for循环之上。代码输入上面提到的for循环,但最后我得到了相同的输出

1 个答案:

答案 0 :(得分:0)

嗯,你在这里做了一次令人讨厌的覆盖 - 在每次迭代中你都失去了所有的值,你从零开始算......

//storing them into Maps
for (Match m : Match.values()) {
    indexes.put(m, new ArrayList<Integer>());
}

此外,在最后一行之后,你&#34;休息&#34;离开内循环,但无论如何地图都会被空的东西覆盖。

移动上述&#34; for&#34;在您创建&#34;索引&#34;的部分之后立即阻止地图。