我有一个刽子手应用程序,我从我创建的Db中获取一个随机单词,然后我将其保存到randomedWord
然后我创建另一个字符串来保存randomedWord
但仅替换为“_” 。显示此hiddenWord
,以便用户知道有多少个字符。
当用户点击输入onlicklistener
触发guess()
方法时:
我有以下代码,它启动一个值为TextView(userInput)
的本地String。然后,如果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
只包含“_”,因此我无法替换为(guess,guess),其中第一个是要替换的,最后是WITHWHAT。
如何使用randomedWord
中的猜测替换hiddenWord
中相同的位置?
答案 0 :(得分:0)
我会略微改变你的做法。当用户输入并调用guess()
时,在randomedWord
中查找该猜测的所有出现,然后将hiddenWord
中的字符设置为猜测。使用StringBuilder
和String.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();
答案 1 :(得分:0)
全部解决了!一切顺利的感觉.... :)
下面是代码:
//将侦听器设置为输入按钮,并在textfield不为空时进行猜测,如果是
则输入需要的吐司 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()方法。将guess(char)置于获取的索引处,如果hiddenWord不再包含“_”,则调用wins()
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();
}
}