我试图在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循环,但最后我得到了相同的输出
答案 0 :(得分:0)
嗯,你在这里做了一次令人讨厌的覆盖 - 在每次迭代中你都失去了所有的值,你从零开始算......
//storing them into Maps
for (Match m : Match.values()) {
indexes.put(m, new ArrayList<Integer>());
}
此外,在最后一行之后,你&#34;休息&#34;离开内循环,但无论如何地图都会被空的东西覆盖。
移动上述&#34; for&#34;在您创建&#34;索引&#34;的部分之后立即阻止地图。