我正在用java編寫一個「Hangman」遊戲,而且我偶然發現了一個問題。在不同位置替換字符串中的多個字符
static String word = JOptionPane.showInputDialog(null, "Enter word");
static String star = "";
public static Integer word_length = word.length();
public static Integer nrOfAttempts = 12;
public static Integer remainingAttempt = nrOfAttempts;
public static void main(String[] args) {
// String görs med lika många stjärnor som ordet har tecken
for (int i = 0; i < word.length(); i++) {
star += "_";
}
attempt();
}
public static void attempt(){
for(int o = 0; o < nrOfAttempts; o++) {
String attempt = JOptionPane.showInputDialog(null, "Enter first attempt");
if (attempt.length() > 1) {
JOptionPane.showMessageDialog(null, "Length of attempt can only be one character long");
attempt();
} else {
if (word.contains(attempt)) {
int attemptIndex = word.indexOf(attempt);
star = star.substring(0,attemptIndex) + attempt + star.substring(attemptIndex+1);
JOptionPane.showMessageDialog(null, "Hit!\nThe word is now:\n"+star);
nrOfAttempts++;
if (star.equals(word)) {
JOptionPane.showMessageDialog(null, "You've won!");
System.exit(0);
}
} else {
remainingAttempt--;
JOptionPane.showMessageDialog(null, "Character not present in chosen word\nRemaining Attempts: "+remainingAttempt);
}
}
}
JOptionPane.showMessageDialog(null, "Loser!");
}
當我想要替換在特定的地方,特定字符的「明星」的字符串(包括下劃線的字),只替換匹配的第一個字符。一遍又一遍,這樣就不可能取勝。
因此,諸如「馬鈴薯」和「酷」等詞語不起作用。
我想要它做的是取代所有匹配的字母,而不僅僅是它看到的第一個。有沒有可能做到這一點,而不創建一個數組?
的事情是,我想這個詞來替換字符,其中僅下劃線。要做到這一點,我必須使用索引(我認爲) – tTim
下劃線是一個字符,所以你可以例如'''替換(嘗試,'_')''' –
是的,但然後所有的下劃線將成爲一個權利?在我的情況下,它會'替換(嘗試,'_')' – tTim