2017-09-02 2 views
1

Bon, alors je me fais un jeu de pendu, pas si nouveau pour Java, mais j'apprends encore. J'ai eu un problème qui m'a dérangé.Remplacer tous les chars (dans StringBuilder) à leur index à partir de leur occurrence une autre chaîne

Je dois remplacer tous les caractères (si l'utilisateur a deviné l'une des lettres correctement) dans un générateur de chaîne (qui a le même nombre de caractères que le mot généré) à leur index. Un peu compliqué je sais, mais voici une partie du code.

StringBuilder wordTemplate = new StringBuilder(); 
for (int i = 0; i < theWord.length(); i++) { 
    wordTemplate.append('?'); 
} 

Ce code crée une chaîne avec la même quantité de caractères que le mot généré, et donc si le mot était « Bonjour », il générerait « ????? » et comme vous devinez chaque lettre il remplacerait l'index corrospondant de la lettre (par exemple si je devinais O, il imprimerait alors "???? o" ect ..)

Cependant, si une lettre réapparaît plus d'une fois , la conjecture n'effectue qu'une lettre, et cette lettre seulement, ce qui interrompt effectivement le jeu car les autres occurrences ne sont jamais changées, ce qui fait que le mot n'est jamais terminé. J'ai cherché pendant un certain temps et ne peux pas trouver une solution pour m'aider à remplacer toutes les occurrences du caractère deviné de leur index multiple du mot.

Si cela aiderait voici le code que j'utilise actuellement pour remplacer les lettres de leur index,

if (theWord.contains(guess)) { 
    wordTemplate.deleteCharAt(theWord.indexOf(guess)); 
    wordTemplate.replace(theWord.indexOf(guess), theWord.indexOf(guess), guess); 
    System.out.println(wordTemplate); 
} 

Comme indiqué précédemment, cela ne fonctionne pour 1 de chaque char, et ne fonctionne pas pour de multiples occurrences. Merci d'avance :)

Répondre

1

Essayez ceci:

String guess = "l"; 
    int start = 0; 
    do { 
     int index = theWord.indexOf(guess, start); 
     if(index >= 0) { 
      wordTemplate.replace(index, index + 1, guess); 
      start = index + 1; 
     } else 
      break; 
    } while (true); 

    System.out.println(wordTemplate); 
0

Vous pouvez remplacer le code suivant:

wordTemplate.deleteCharAt(theWord.indexOf(guess)); 
wordTemplate.replace(theWord.indexOf(guess), theWord.indexOf(guess), guess); 

à

wordTemplate = new StringBuilder(wordTemplate.toString().replace("?", guess));