我正在尝试将输入文件中的单词解析为哈希图,其中每个单词都映射到文件中出现的次数。我必须通过字符流来执行此操作(即:我必须逐个字符地遍历文件)。现在可以正常使用了,但是,我的解析器似乎有时会跳过空格,并将两个单词作为单个字符串包含在内(例如:它们中间,helloworld等...),有人可以指出我在做什么错吗?此外,无论如何,是否要包含(字母/数字)形式的字母(字母/数字)。 (因此,它是一个字母,然后是一个点,然后是一个字母,重复了多次(简称,例如I.B.M))。
这是我的代码段
int i;
while ((i=f.read()) != -1) {
if (Character.isLetterOrDigit(i)) {
st += (char)i;
}
else {
st = st.toLowerCase();
if (tokens.containsKey(st)) {
int temp = tokens.get(st);
tokens.put(st, temp+=1);
}
else {
tokens.put(st, 1);
st = "";
}
}
}
tokens.remove("");
return tokens;
}`
任何帮助将不胜感激,输入的是文件读取器对象btw。
答案 0 :(得分:0)
这是将您的字符串重新设置为空的原因:
st = "";
因此,它应该在外部else
中,而不是内部,否则,只有在找到新的(不重复的)单词时才将其设置为空。这将使下一个单词与前一个单词串联。
对于第二部分,您可以做类似的事情
if ( Character.isLetterOrDigit(i) || (st != "" && (char)i == '.') ) {
st += (char)i;
}
编辑:
然后,要删除最后一个句点,只需检查st
的最后一个字符是否是到达else
的句点即可。
另一项修改:
如果每个周期前只需要一个字母,则可以在st
中向后检查字符串if
。或者只是在拆分后在else
中对其进行处理。甚至使用Regular Expressions。
如何实现此目标取决于您。