我在Eclipse中开发的刽子手游戏的代码片段如下:
String secret = "apple";
String str = "-----"
for (int i = 0; i < 5; i++) {
if (letter == secret.charAt(i)){
str = str.replace(str.charAt(i), letter);
}
}
System.out.println(str);
不幸的是,这是打印出来的
aaaaa
而不是
a----
我如何才能使这个工作?
答案 0 :(得分:5)
JavaDoc of String#replace(char, char)表示它将替换所有次事件而不仅仅是第一次
。由于你想制作一个刽子手游戏,你只需要替换letter
中出现secret
的位置
使用StringBuilder
或char[]
char[] secret="apple".toCharArray();
char[] str= new char[secret.length];
Arrays.fill(str, '-');
for (int i = 0; i < secret.length; i++) {
if (letter ==secret[i]){
str[i] = letter;
}
}
System.out.println(new String(str));
答案 1 :(得分:1)
如果你真的只想在String中设置一个字符,你可以这样做:
StringBuilder sbStr = new StringBuilder(str);
sbStr.setCharAt(4, 'x');
这是您重构的代码:
String secret = "apple";
String str = "-----"
StringBuilder sbStr = new StringBuilder(str);
for (int i = 0; i < 5; i++) {
if (letter == secret.charAt(i)){
sbStr.setCharAt(i, letter);
}
}
System.out.println(sbStr.toString());
答案 2 :(得分:1)
str.replace(str.charAt(i), letter);
无效,因为它不会替换单个字符,但是匹配str.charAt(i)
的字符串中的所有字符串,您可以使用StringBuilders来更改给定索引处的字符,例如这样:
String secret = "apple";
StringBuilder str = new StringBuilder("-----");
for (int i = 0; i < 5; i++) {
if (letter == secret.charAt(i)){
str.setCharAt(i, letter);
}
}
System.out.println(str.toString()); // Or simply: System.out.println(str);
如果你不想使用StringBuilder,那么这样的东西也会起作用:
String secret = "apple";
String str = "-----";
for (int i = 0; i < 5; i++) {
if (letter == secret.charAt(i)){
str = str.substring(0, i) + secret.charAt(i) + str.substring(i);
}
}
System.out.println(str);
虽然在这种情况下我建议使用StringBuilder。
希望这有帮助。
答案 3 :(得分:1)
我建议对秘密和 str 使用字符串构建器,并在秘密中标记猜测字符,因为您的解决方案可能无法重复字符
char letter = 'a';
StringBuilder secret = new StringBuilder("apple");
StringBuilder str = new StringBuilder("-----");
int index = secret.indexOf(String.valueOf(letter));
if(index != -1)
{
secret.setCharAt(index, '-');
str.setCharAt(index, letter);
}
System.out.println(secret);
System.out.println(str);
希望有助于