Considérant que nous avons un String
qui contient trois mots, par exemple, "kids story book"
où nous avons ajouté chacun de ces mots dans un HashMap<String, Integer>
tandis que la partie String contient le mot et la partie Integer contient la position de mot dans la chaîne, à savoir, 1, 2 et 3. Supposons également qu'il existe un autre type de HashMap
qui est le champ par un sérieux de mots groupés. Considérez que chaque groupe de mots a une valeur entière commune en tant qu'ID qui indique qu'ils appartiennent ensemble. Mon but est de regarder dans la seconde HashMap
afin de trouver toutes les chaînes qui contient soit kids
, story
ou book
, puis renvoyer le mot avec son ID entier unique. Voici mon code pour le faire:problème avec contains() pour correspondre à deux chaînes
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
}
}
}
Il y a trois problèmes: Tout d'abord, la première HashMap
contient bien tous les trois mots, mais si j'utilise la console pour imprimer les résultats, il imprime uniquement la mise en correspondance pour le premier élément de HashMap
et pas tous les trois (alors qu'il y a d'autres correspondances pour chacun des trois mots). Deuxièmement, comme il est évident dans le code, j'ai commencé la boucle de i=-1
et c'est parce que si j'utilise i=0
il n'ajoutera pas tous les trois caractères au HashMap
et dans ce cas, l'ordre des mots dans la chaîne ne sera pas le même que l'ordre d'entre eux dans le HashMap
et enfin, même pour les articles dans la première position du HashMap
, il ne retourne même pas tout le match, utilisé par . J'ai vérifié manuellement et j'ai découvert qu'il y avait plus de résultats à retourner pendant que ça n'arrivait pas.
Veuillez fournir un petit exemple exécutable de votre problème qui contient du code sur la façon dont les deux cartes sont remplies. – Tom
@Tom Et maintenant? – lonesome