2012-09-24 146 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。

我该如何解决这个问题?