在循环期间将变量正确存储在 ArrayList 中
Store variables correctly in an ArrayList during a loop
我在 arrayList 中存储变量时遇到一些问题。该程序的建议是从一个文件 (A) 读取,读取另一个文本文件 (B),然后比较 B 中 A 中出现的词汇所占的百分比。因此,我将一起出现的每个单词存储在 neuS。问题来了。如果我尝试获取输出,它似乎将值随机存储在里面!因此,例如我得到如下输出:
elektrotechnik und
die bedeutendste
die bedeutendste
und simulation
erleben die
eine form
eine form
所以有一些单词(正确的说法是 Ngramms,因为我总是将两个单词存储在一起),它们在 neuS 中只有一次,而其他的只有一次。我也看到了三倍相同的输出。我希望所有单词只在 neuS 中存储 一次。我做错了什么?代码不完整,有一些代码我认为与这个问题无关。
谢谢!
BufferedReader in = new BufferedReader(new FileReader("informatik_test.txt"));
String str;
//
while ((sCurrentLine = in.readLine()) != null) {
// System.out.println(sCurrentLine);
arr = sCurrentLine.split(" ");
for (int i = 0; i < arr.length - 1; i = i + 2) {
String s = (arr[i].toString() + " " + arr[i + 1].toString())
.toLowerCase();
if (null == (hash.get(s))) {
hash.put(s, 1);
} else {
int x = hash.get(s) + 1;
hash.put(s, x);
}
}
//
ArrayList< String> words = new ArrayList< String>();
ArrayList< String> neuS = new ArrayList< String>();
ArrayList< Long> neuZ = new ArrayList< Long>();
// Read all Lines from a file
for (String line = br.readLine(); line != null; line = br.readLine()) {
String h[] = line.split(" ");
words.add(h[0].toLowerCase());
}
//
for (String x : hash.keySet()) {
summe = summe + hash.get(x);
long neu = hash.get(x);
for (String s : words) {
if (x.equals(s)) {
neuS.add(x);
neuZ.add(neu);
disc = disc + 1;
}
}
}
// Testing which word for output -->! THE PROBLEM!!
for (String m : neuS) {
System.out.println(m);
}
}
如果你希望neuS中的单词只存储一次,那么neuS应该是一个HashSet。事实上,因为 words
和 neuS
都是数组,如果 words 包含重复项,neuS 也会包含重复项。
旁注:对于 String h[] = line.split(" ");
,您在拆分中有 2 个空格。是故意的吗?
您可以将 neuS 变成一个 HashSet。它会修复你的输出。
for (String s : words) {
if (x.equals(s)) {
neuS.add(x);
neuZ.add(neu);
disc = disc + 1;
}
}
你应该在disc = disc + 1;
之后添加break;
并且你应该在添加之前检查x是否在neuS中。
我在 arrayList 中存储变量时遇到一些问题。该程序的建议是从一个文件 (A) 读取,读取另一个文本文件 (B),然后比较 B 中 A 中出现的词汇所占的百分比。因此,我将一起出现的每个单词存储在 neuS。问题来了。如果我尝试获取输出,它似乎将值随机存储在里面!因此,例如我得到如下输出:
elektrotechnik und
die bedeutendste
die bedeutendste
und simulation
erleben die
eine form
eine form
所以有一些单词(正确的说法是 Ngramms,因为我总是将两个单词存储在一起),它们在 neuS 中只有一次,而其他的只有一次。我也看到了三倍相同的输出。我希望所有单词只在 neuS 中存储 一次。我做错了什么?代码不完整,有一些代码我认为与这个问题无关。
谢谢!
BufferedReader in = new BufferedReader(new FileReader("informatik_test.txt"));
String str;
//
while ((sCurrentLine = in.readLine()) != null) {
// System.out.println(sCurrentLine);
arr = sCurrentLine.split(" ");
for (int i = 0; i < arr.length - 1; i = i + 2) {
String s = (arr[i].toString() + " " + arr[i + 1].toString())
.toLowerCase();
if (null == (hash.get(s))) {
hash.put(s, 1);
} else {
int x = hash.get(s) + 1;
hash.put(s, x);
}
}
//
ArrayList< String> words = new ArrayList< String>();
ArrayList< String> neuS = new ArrayList< String>();
ArrayList< Long> neuZ = new ArrayList< Long>();
// Read all Lines from a file
for (String line = br.readLine(); line != null; line = br.readLine()) {
String h[] = line.split(" ");
words.add(h[0].toLowerCase());
}
//
for (String x : hash.keySet()) {
summe = summe + hash.get(x);
long neu = hash.get(x);
for (String s : words) {
if (x.equals(s)) {
neuS.add(x);
neuZ.add(neu);
disc = disc + 1;
}
}
}
// Testing which word for output -->! THE PROBLEM!!
for (String m : neuS) {
System.out.println(m);
}
}
如果你希望neuS中的单词只存储一次,那么neuS应该是一个HashSet。事实上,因为 words
和 neuS
都是数组,如果 words 包含重复项,neuS 也会包含重复项。
旁注:对于 String h[] = line.split(" ");
,您在拆分中有 2 个空格。是故意的吗?
您可以将 neuS 变成一个 HashSet。它会修复你的输出。
for (String s : words) {
if (x.equals(s)) {
neuS.add(x);
neuZ.add(neu);
disc = disc + 1;
}
}
你应该在disc = disc + 1;
之后添加break;
并且你应该在添加之前检查x是否在neuS中。