Search code examples
androidtextviewreplaceall

How to use replaceAll() correct


I have a hangman-app which I fetch a random word from Db i created, then I save it to randomedWord and then i make another String for holding randomedWord but replaced with only "_". This hiddenWord is displayed so the user knows how many chars there is.

When a user hits Enter a onlicklistener fires guess() method:

I have following code which initates a local String which has the value of a TextView(userInput). Then if randomedWord contains the guess I want to put in guess into the same position as it is in the randomedWord, but now to hiddenWord and then update the TextView again.

Guess method:

public void guess() 
{
    String guess = userInput.getText().toString();

    if(randomedWord.contains(guess)) 
    {
        hiddenWord = hiddenWord.replaceAll(guess, guess);
        this.wordHolder.setText(hiddenWord);
    } else 
    {
        showImages();
    }
}

The problem I think is this line:

hiddenWord = hiddenWord.replaceAll(guess, guess);

because hiddenWord just contains "_" and therefore I can't replace with (guess, guess) where the first is WHAT to be replaced and last is WITHWHAT.

How do I replace the same POSITION as it is in randomedWord with guess into hiddenWord?


Solution

  • Got it all solved! The feeling when everything works smoothly.... :)

    Heres the code:

    // Set listener to enter-button and do guess when textfield is not empty and toast that input need if it is

     enterLetterButton.setOnClickListener(new OnClickListener(){
                public void onClick(View arg0) {
    
                    if (!(userInput.getText().toString().isEmpty()) )
                    {
                        guess();
                    } else if (userInput.getText().toString().isEmpty())
                    {
                        Toast toast = Toast.makeText(getApplicationContext(), "You need to insert a letter", Toast.LENGTH_SHORT);
                        toast.show();
                    }
                }
            });
    

    // invWord() method. Converts the randomedWord to a string of "_".

    public void invWord() 
        {
            hiddenWord = randomedWord;
            hiddenWord = hiddenWord.replaceAll(".", "_" +" ");
        }
    

    //guess() method. Puts the guess(char) at the index fetched and if the hiddenWord contains no more "_" winner() is called

      public void guess() throws IndexOutOfBoundsException
            {
                char guess = userInput.getText().charAt(0);
                StringBuilder builder = new StringBuilder(hiddenWord);
                String j = ""+guess;
                int index = randomedWord.indexOf(guess);
    
                if (randomedWord.contains(j))
                {
                    while (index >= 0) 
                    {
                        builder.setCharAt(index*2, guess);
                        index = randomedWord.indexOf(guess, index + 1);
                        hiddenWord = builder.toString().trim();
                        wordHolder.setText(hiddenWord);
                        if (!(hiddenWord.toString().contains("_".toString())) )
                        {
                            winner();
                        }
                    }   
                }
                else 
                {
                    showImages();
                }
            }