[英]Trouble using if-statement and String.replace
我在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----
我将如何工作?
String#replace(char,char)的JavaDoc声明它将替换所有出现的对象,而不仅仅是第一次出现的对象。
由于您要制作子手游戏,因此只需要替换letter
中secret
出现的位置即可
使用StringBuilder
或char[]
手动替换String中的字符可能更好。
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));
如果您只想在字符串中仅设置一个字符,则可以执行以下操作:
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());
str.replace(str.charAt(i), letter);
将不会起作用,因为它不能替换单个字符,但是String中与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。
希望这可以帮助。
我建议对Secret和str都使用String builder,并且也要秘密标记猜测字符,因为您的解决方案可能无法重复字符
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);
希望能有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.