我试图替换字符串中的字符
im trying to replace a char in a string
我的程序正在猜一个词。我有 2 个字符串 wordToGuess
- 用户应该猜测的词和
wordSoFar
- 用户看到 _ _ _
的单词。
当他猜到一个字母时,_
变为那个字母。
我尝试使用 substring
但它没有用,所以现在我尝试使用 stringBuilder
但它在 运行.
时不起作用
public String showLetter(char letter) {
StringBuilder sb = new StringBuilder(wordSoFar);
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == letter) {
sb.setCharAt(i, letter);
}
}
return sb;
}
为此您不需要 StringBuilder:
String wordSoFar = "_ _ _ _ _";
String wordAfterGuess = wordSoFar.substring(0,4)+'x'+wordSoFar.substring(5);
这应该导致“_ _ x _ _”
您的总 class 可能如下所示:
public class test {
private static String wordToGuess = "quorum";
private static String wordSoFar = "______";
public static void main(String[] args) {
wordSoFar = showLetter('r');
System.err.println(wordSoFar);
wordSoFar = showLetter('q');
System.err.println(wordSoFar);
wordSoFar = showLetter('m');
System.err.println(wordSoFar);
}
public static String showLetter(char letter) {
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == letter) {
wordSoFar = wordSoFar.substring(0,i)+letter+wordSoFar.substring(i+1);
}
}
return wordSoFar;
}
}
给出以下输出:
___r__
q__r__
q__r_m
您似乎正在尝试 return StringBuilder
对象,而不是您的方法指定为 return 类型的 String
对象,并且这两个是完全不同的对象。
您不能将 StringBuilder
转换为 String
,但您可以使用 [=16] 将 StringBuilder
的内容输出为 String
=] 方法,附加到您的 return
语句的末尾,因此它按照 return sb.toString();
的行读取
你是过于复杂的东西。您需要一个存储 char 值的数据结构;这很容易改变;这可以很容易地变成一个字符串。 String 或 StringBuilder/Buffer 不是满足此要求的良好数据结构(正如您已经想到的那样:因为 String 对象是不可变的)。
因此,我建议一个不同的解决方案:只需 而不是 使用 String 或 Buffer 作为 "data structure" 来猜测字符。
相反,做类似的事情:
char guesseedChars = new char[x];
Arrays.fill(guesseedChars, '_');
最初(其中 x 是要猜测的单词的长度)。
现在,当用户猜对时,你删除 _:
guesseedChars[index] = 'a'
换句话说:您将 "wildcard" _ 替换为正确的字母。
要打印,您可以使用:
String currentContent = new String(guesseedChars)
在每个循环中;并打印该字符串。完成。
我的程序正在猜一个词。我有 2 个字符串 wordToGuess
- 用户应该猜测的词和
wordSoFar
- 用户看到 _ _ _
的单词。
当他猜到一个字母时,_
变为那个字母。
我尝试使用 substring
但它没有用,所以现在我尝试使用 stringBuilder
但它在 运行.
public String showLetter(char letter) {
StringBuilder sb = new StringBuilder(wordSoFar);
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == letter) {
sb.setCharAt(i, letter);
}
}
return sb;
}
为此您不需要 StringBuilder:
String wordSoFar = "_ _ _ _ _";
String wordAfterGuess = wordSoFar.substring(0,4)+'x'+wordSoFar.substring(5);
这应该导致“_ _ x _ _”
您的总 class 可能如下所示:
public class test {
private static String wordToGuess = "quorum";
private static String wordSoFar = "______";
public static void main(String[] args) {
wordSoFar = showLetter('r');
System.err.println(wordSoFar);
wordSoFar = showLetter('q');
System.err.println(wordSoFar);
wordSoFar = showLetter('m');
System.err.println(wordSoFar);
}
public static String showLetter(char letter) {
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == letter) {
wordSoFar = wordSoFar.substring(0,i)+letter+wordSoFar.substring(i+1);
}
}
return wordSoFar;
}
}
给出以下输出:
___r__
q__r__
q__r_m
您似乎正在尝试 return StringBuilder
对象,而不是您的方法指定为 return 类型的 String
对象,并且这两个是完全不同的对象。
您不能将 StringBuilder
转换为 String
,但您可以使用 [=16] 将 StringBuilder
的内容输出为 String
=] 方法,附加到您的 return
语句的末尾,因此它按照 return sb.toString();
你是过于复杂的东西。您需要一个存储 char 值的数据结构;这很容易改变;这可以很容易地变成一个字符串。 String 或 StringBuilder/Buffer 不是满足此要求的良好数据结构(正如您已经想到的那样:因为 String 对象是不可变的)。
因此,我建议一个不同的解决方案:只需 而不是 使用 String 或 Buffer 作为 "data structure" 来猜测字符。
相反,做类似的事情:
char guesseedChars = new char[x];
Arrays.fill(guesseedChars, '_');
最初(其中 x 是要猜测的单词的长度)。
现在,当用户猜对时,你删除 _:
guesseedChars[index] = 'a'
换句话说:您将 "wildcard" _ 替换为正确的字母。
要打印,您可以使用:
String currentContent = new String(guesseedChars)
在每个循环中;并打印该字符串。完成。