J'ai cette ligne de texte:
Nombre de troupes Les États-Unis sont stationnés au sud-Viet Nam par rapport au nombre de troupes qu'il a postées en Allemagne de l'Ouest. P> blockQuote>
Et ce que j'essaie de faire est de vérifier la ligne la ligne de texte em> pour tous les mots pouvant avoir une signification lorsque
combiné p>. P>. Par exemple: remplacez la chaîne
Viet Nam code> avec le mot correctVietnam code>. p>
J'ai écrit cette fonction: P>
private String correctLine(ArrayList<String> newWords, String line) { line = line.toLowerCase(); String[] words = line.split(" "); for (int i = 0; i < newWords.size(); i++) { for (int j = 0; j < words.length; j++) { if(newWords.get(i).toLowerCase().equals(words[j].concat((j + 1 == words.length)?"":words[j+1]))){ line = line.replace(words[j].toLowerCase(), newWords.get(i).toLowerCase()); line = line.replace(words[j+1].toLowerCase(), ""); } } } return line; }
3 Réponses :
Vous devriez penser très fort des deux déclarations sur ce que vous remplacez, si vous remplacez Viet code> avec Vietnam code>, puis remplacez nam code> avec rien Ensuite, vous remplacerez évidemment le nam code> du juste remplacé fort> Vietnam code> à nouveau. "Code> Viet Nam Code> -> Vietnam Nam Code> -> Viet Nam Code> / p>
luk2302 est correct, bien que vous finissez avec deux espaces consécutifs avec cette approche qui doit également être abordée. Pourrais-je suggérer une autre approche qui est plus simple et plus flexible?
Map<String, String> replace = new HashMap<>();
replace.put("viet nam", "vietnam");
String line = "number of troops the united states has stationed in south viet nam as compared with the number of troops it has stationed in west germany .";
for (String key : replace.keySet()) {
line = line.replaceAll(key, replace.get(key));
}
Vous n'avez pas vraiment besoin des deux Le code ci-dessous est testé et fonctionne bien. p> remplacer code>. in south vietnam as compared with the number of troops it has stationed in west germany
Je pense que vous devez exécuter cela dans un débogueur ou utiliser des instructions d'impression pour vérifier les valeurs de vos variables. L'impression des valeurs de ligne et des valeurs de remplacement feront. Je penserais aussi que la valeur
mots [j + 1] code> devrait éventuellement provoquer une exception exceptionnelle lorsque j == mots.length - 1. Et toute la boucle interne ne fera pas ce que vous pensez , Je crois.