我正在尝试创建一个刽子手程序......以及我似乎无法找到的其他问题,或者创建一个方法来查找多出一个字母并替换所有找到的事件。我一直在试图解决这个问题的findAndReplace()方法......它没有用。请任何人帮助我
public class Hangman {
static Scanner sc = new Scanner(System.in);
static final int MAXTRYS = 10;
static int numError = 0;
static boolean FINSHED = false;
String s;
String input;
String tW;
int pos;
public static void main(String[] args) {
System.out.println("Welcome to the Hangman App" + "\n");
String s = answerKey();
StringBuilder AnswerKey = dashReplace(s);
while(!FINSHED && numError < MAXTRYS){
//get user input and cast to char
System.out.println("Enter an Letter: ");
String input = sc.nextLine();
char ch = input.charAt(0);
int pos = findAndReplace(s, AnswerKey, input, ch);
int index = AnswerKey.indexOf("-");
if(pos == -1){
numError++;
continue;
}else if(index == -1){
FINSHED = true;
System.out.println("you won!");
}
}
}
public static int findAndReplace(String s, StringBuilder AnswerKey,
String input, char ch) {
//find position of user input and replace
int pos = s.indexOf(input);
AnswerKey.setCharAt(pos, ch);
// while(pos > 0) {
// AnswerKey.setCharAt(pos, (char) (ch+1));
//}
System.out.println(AnswerKey);
return pos;
}
public static StringBuilder dashReplace(String s) {
//replace non-white space char with dashes and creates StringBuilder Object
String tW = s.replaceAll("\\S", "-");
System.out.print(tW + "\n");
StringBuilder AnswerKey = new StringBuilder(tW);
return AnswerKey;
}
public static String answerKey() {
//get random array element
String array[] = new String[10];
array[0] = "Hamlet";
array[1] = "Mysts of Avalon";
array[2] = "The Iliad";
array[3] = "Tales from Edger Allan Poe";
array[4] = "The Children of Hurin";
array[5] = "The Red Badge of Courage";
array[6] = "Of Mice and Men";
array[7] = "Utopia";
array[8] = "Chariots of the Gods";
array[9] = "A Brief History of Time";
ArrayList<String> list = new ArrayList<String>(Arrays.asList(array));
Collections.shuffle(list);
String s = list.get(0);
//for testing
System.out.println(s);
return s;
}
}
答案 0 :(得分:1)
典型的“查找和替换”循环如下所示:
// Search starts at pos+1, so we set pos to -1 to start search at zero
int pos = -1;
// We'll break out of the loop when there are no further matches
while (true) {
// Look for the desired character starting one character past the pos
pos = s.indexOf(input, pos+1);
// If the character is not found, end the loop
if (pos < 0) break;
// Otherwise, replace the character
s.setCharAt(pos, ch);
}
请参阅上面代码中的注释,了解正在发生的事情。
答案 1 :(得分:0)
最简单的解决方案似乎是将StringBuilder
转换为String
,使用replace()
方法,然后将StringBuilder
替换为新的<{1}}:< / p>
answerKey = new StringBuilder(answerKey.toString().replace(charToReplace, newChar));