【问题标题】:Trouble using if-statement and String.replace使用 if 语句和 String.replace 时遇到问题
【发布时间】:2015-01-06 16:51:36
【问题描述】:

我在 Eclipse 中开发的刽子手游戏有以下 sn-p:

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----

我怎样才能让它发挥作用?

【问题讨论】:

  • 在这种情况下letter 是什么?无论如何你不能在java中使用==来检查String
  • 不,这不是编译。
  • String#replace(char, char) 用第二个字符替换所有出现的第一个字符,而不仅仅是在指定的(你没有指定,因为你不能)位置。
  • 这只是整个代码中的一小部分,字母是用户输入的字符,我正在检查字符而不是字符串
  • 我在这里写得很快,它的 System.out.print 和我意识到这个错误感谢您的帮助

标签: java str-replace


【解决方案1】:

JavaDoc of String#replace(char, char) 声明它将替换所有次出现,而不仅仅是第一次出现。

既然要做刽子手游戏,只需要替换secret中出现letter的位置即可

使用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));

【讨论】:

    【解决方案2】:

    如果你真的只想在字符串中设置一个字符,你可以这样做:

    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());
    

    【讨论】:

      【解决方案3】:

      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。

      希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        我建议对 secret 和 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);
        

        希望有帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-27
          相关资源
          最近更新 更多