我已经研究过这个话题了一段时间,但没有太大的成功。我确实找到了StringBuilder并且它可以创造奇迹,但这就是我所拥有的。以下是我如何使我的刽子手程序按照它应该的方式工作:
if(strGuess.equalsIgnoreCase("t")){
mainword.replace(0,1,"T");
gletters.append('T');
}
else if(strGuess.equalsIgnoreCase("e")){
mainword.replace(1,2,"E");
gletters.append('E');
}
else if(strGuess.equalsIgnoreCase("c")){
mainword.replace(2,3,"C");
gletters.append('C');
}
else if(strGuess.equalsIgnoreCase("h")){
mainword.replace(3,4,"H");
gletters.append('H');
}
else if(strGuess.equalsIgnoreCase("n")){
mainword.replace(4,5,"N");
gletters.append('N');
}
else if(strGuess.equalsIgnoreCase("o")){
mainword.replace(5,6,"O");
mainword.replace(7,8,"O");
gletters.append('O');
}
else if(strGuess.equalsIgnoreCase("l")){
mainword.replace(6,7,"L");
gletters.append('L');
}
else if(strGuess.equalsIgnoreCase("g")){
mainword.replace(8,9,"G");
gletters.append('G');
}
else if(strGuess.equalsIgnoreCase("y")){
mainword.replace(9,10,"Y");
gletters.append('Y');
}
else{
JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word!");
errors++;
gletters.append(strGuess.toUpperCase());
}
SetMain = mainword.toString();
GuessedLetters = gletters.toString();
WordLabel.setText(SetMain);
GuessedLabel.setText(GuessedLetters);
GuessText.setText(null);
GuessText.requestFocusInWindow();
但是,对于每个单词的每个字母,我都不能这样做,所以有一种简单而有效的方法吗?我想要的是有一个类型的循环,这样我只需要使用它一次用于任何单词。所以这个词可能是技术(就像它在上面)或苹果或泡菜或圣诞节或你好或其他什么。
我尝试过使用for循环,我觉得答案就在于此。如果有人能解释charAt()方法以及如何/在何处使用它,那就太好了。我最接近效率的是:
for(i = 0; i < GuessWord.length(); i++) {
if (GuessWord.charAt(i) == guess2) {
mainword.replace(i,i,strGuess.toUpperCase());
}
因此,如果您可以将其作为基础并使用它,那就像解决它一样?或者告诉我一些我没有想到的事情。
答案 0 :(得分:3)
这是一个很好的问题。有明显重复的代码,那么如何用可重用的东西替换所有这些代码。实际上,您可以免除所有代码。
整个代码块只能替换为一行(适用于每个单词)!
String word = "TECHNOLOGY"; // This is the word the user must guess
mainword = word.replaceAll("[^" + gletters + "]", "_");
这将replaceAll()
与正则表达式一起使用,表示“任何尚未猜到的字母”,并将其替换为下划线字符"_"
。请注意,字符串是不可变的,replaceAll()
方法返回修改后的字符串 - 它不会修改调用的字符串。
这里有一些测试代码可以显示它的实际效果:
public static void main(String[] args) {
String word = "TECHNOLOGY"; // what the user must guess
StringBuilder gletters = new StringBuilder("GOTCHA"); // letters guessed
String mainword = word.replaceAll("[^" + gletters + "]", "_");
System.out.println(mainword);
}
输出:
T_CH_O_OG_