【发布时间】:2015-11-01 07:11:58
【问题描述】:
考虑到我们有一个包含三个单词的String,例如"kids story book",我们将这些单词中的每一个添加到HashMap<String, Integer>中,而字符串部分包含单词,整数部分包含单词在字符串,即 1、2 和 3。还假设有另一个相同类型的 HashMap,它是由一组单词组成的字段。考虑每组单词都有一个共同的整数值作为 ID,表示它们属于一起。我的目标是查看第二个HashMap,以便找到任何包含kids、story 或book 的字符串,然后返回该单词及其唯一整数ID。这是我这样做的代码:
String keyword="kids story book";
static HashMap<String, Integer> tempp = new HashMap<>();
static HashMap<String, Integer> stringToint = new HashMap<>();
//File is .txt file which contains some characters at each line
FileOutputStream Fcategorize=new FileOutputStream(File,true);
FileReader inputFile = new FileReader(File);
BufferedReader bufferReader = new BufferedReader(inputFile);
String line = bufferReader.readLine();
for(int i = 0; line != null; i++){
if( header(i).equals(line)){
while( (line = bufferReader.readLine()) != null && ! Footer(i).equals( line ) )
{
stringToint.put(line, i);
}
}
}
StringTokenizer start=new StringTokenizer(keyword);
for(int i=-1; i<=start.countTokens();i++)
{
String temp=start.nextToken();
tempp.put(temp, i);
}
Set<String> fkeys = stringToint.keySet();
Iterator<String> fit = fkeys.iterator();
Set<String> Lkeys =tempp.keySet();
Iterator<String> sit = Lkeys.iterator();
for(int i=0 ; i<tempp.size() ; i++)
{
nextToken=sit.next();
while (fit.hasNext()){
String featurename = fit.next();
if(featurename.contains(nextToken))
{
//Do something
}
}
}
存在三个问题:首先,第一个 HashMap 确实包含所有三个单词,但是如果我使用控制台打印结果,它只会打印匹配 HashMap 的第一项而不是全部三个 (而这三个词还有其他匹配项)。其次,在代码中很明显,我从i=-1 开始循环,这是因为如果我使用i=0,它不会将所有三个字符都添加到HashMap,在这种情况下,单词的顺序String 中的顺序不会与HashMap 中的它们的顺序相同,最后,即使对于HashMap 的第一个位置的项目,它甚至不会返回所有匹配项,由contains() 使用。我手动检查,发现有更多结果要返回,而它没有发生。
【问题讨论】:
-
请提供一个可运行的小示例来说明您的问题,其中包含有关两个地图的填充方式的代码。
标签: java string contains stringtokenizer