麻烦使用if语句和String.replace

时间:2015-01-06 16:51:37

标签: java str-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----

我如何才能使这个工作?

4 个答案:

答案 0 :(得分:5)

JavaDoc of String#replace(char, char)表示它将替换所有次事件而不仅仅是第一次

由于你想制作一个刽子手游戏,你只需要替换letter中出现secret的位置

使用StringBuilderchar[]

手动替换字符串中的字符可能更好
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);

希望有助于