2012-09-24 144 views
1

我有一個hang子手應用程序,我從我創建的Db中獲取一個隨機單詞,然後將它保存到randomedWord然後我爲另一個字符串保存randomedWord,但僅替換爲「_」。顯示此hiddenWord,以便用戶知道有多少個字符。如何使用replaceAll()正確

當用戶點擊輸入onlicklistener火災guess()方法:

我具有以下其中initates具有TextView(userInput)的值的局部字符串的代碼。然後,如果randomedWord包含我想猜測到的位置與randomedWord中的位置相同,但是現在更改爲hiddenWord,然後再次更新TextView

競猜方法:

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

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

我認爲這個問題是這一行:

hiddenWord = hiddenWord.replaceAll(guess, guess); 

因爲hiddenWord只包含 「_」,因此我不能代替(猜,猜),其中首先是什麼被替換,最後是WITHWHAT。

如何將randomedWord中的相同位置替換爲hiddenWord

回答

0

明白了!一切順利的感覺....:)

繼承人的代碼:

//設置監聽輸入按鈕和文本框時不爲空和烤麪包是輸入需要的,如果它是

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不要猜()方法。將randomedWord轉換爲一個「_」字符串。

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

// guess()method。放猜測(焦炭)的索引處獲取如果hiddenWord中不再有「_」獲得者()被調用

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

我會稍微改變你的方法。當用戶輸入並調用guess()時,請在randomedWord中查找該猜測的所有出現次數,然後設置hiddenWord中的字符進行猜測。使用StringBuilderString.indexOf(),它看起來像這樣。此外,猜測將需要一個char

StringBuilder builder = new StringBuilder(hiddenWord); 
int index = word.indexOf(guess); 
while (index >= 0) { 
    builder.setCharAt(index, guess); 
    index = word.indexOf(guess, index + 1); 
} 
hiddenWord = builder.toString(); 
+0

完全就是我一直在尋找,愛你的人! –

+0

雖然有一個問題,當我使用indexOf時,我是否會得到所有的出現?我的意思是在香蕉中,我會得到[1,3,5]作爲索引嗎?然後你可能會認爲setCharAT(index,guess)會填充所有這些索引,但它並不是,它只是填補了第一次出現。所以,如果我有更多相同的字母它不能正常工作。你對此也有任何意見嗎? –

+0

是的。方法定義看起來像'indexOf(int index,char guess)'。返回字符'guess'的'index'後的第一個發生的索引。所以當我們改變索引的值時,它會沿着字符串迭代來查找每個事件。我測試它,它可以處理多個角色的出現(請參閱http://ideone.com/TeqsH)。 –

0

我對這個問題的解決方案是這樣的:

// INVWORD方法,輪流FETCHED字轉換成副本,但只有「_」

時,輸入按鈕ISCLICKED被稱爲
public void invWord() 
    { 
     hiddenWord = randomedWord; 
     hiddenWord = hiddenWord.replaceAll(".", "_"); 
    } 

// GUESS METHOD

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, guess); 
       index = randomedWord.indexOf(guess, index + 1); 
       hiddenWord = builder.toString().trim(); 
       wordHolder.setText(hiddenWord); 
       if (hiddenWord.trim().contains(randomedWord)) 
       { 
        winner(); 
       } 
      } 
     } 
     else 
     { 
      showImages(); 
     } 
    } 

問題是我需要爲hiddenWord = hiddenWord.replaceAll(「。」,「_」)添加一個+「」。使這個詞像_ _ _ _ _,並讓用戶看到這個詞有多少個詞。在我的解決方案中,它只會很長_ ___,但它的工作原理。如果我在builder.setCharAt(index,guess)處設置索引* 2;格式會很好,但勝利者();永遠不會運行,我猜是因爲「」使hiddenWord不再= ranomedWord。

我該如何解決這個問題?