0
votes

String.replace () remplace l'une des deux cordes seulement

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 correct Vietnam 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;
}


1 commentaires

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] 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.


3 Réponses :


1
votes

Vous devriez penser très fort des deux déclarations sur ce que vous remplacez, si vous remplacez Viet avec Vietnam , puis remplacez nam avec rien Ensuite, vous remplacerez évidemment le nam du juste remplacé Vietnam à nouveau. "Code> Viet Nam -> Vietnam Nam -> Viet Nam / p> xxx


0 commentaires

2
votes

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));
    }


0 commentaires

1
votes

Vous n'avez pas vraiment besoin des deux remplacer code>.

Le code ci-dessous est testé et fonctionne bien. p>

in south vietnam as compared with the number of troops it has stationed in west germany


0 commentaires