Java - 替换字符串中的字符

时间:2014-10-20 20:22:22

标签: java character stringbuilder

不要以为我没有在网上搜索答案。为什么它会给我一些outofbounds错误?

我有两个6个字符长的字符串。一个是“daniel”,另一个是“------”。用户输入一个角色。循环遍历“daniel”字符串并通过char检查char是否与用户输入匹配。如果匹配,则应将猜测的char替换为“------”中的char。因此,如果您输入'a',它应输出“-a ----”并继续循环。接下来,如果输入“e”,它应输出“-a - e-”等。代码不会出现编译错误或任何警告,也非常有意义。我尝试了子串和替换,但这更简单,更短。我试过调试它,但它没有提供有用的信息。我不知道为什么它会返回outofbounds错误。

package hello.world;

import java.util.Scanner;

public class HelloWorld {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String word="daniel";
        StringBuilder guess2 = new StringBuilder("------");
        char guess;

        System.out.println("**********************");
        System.out.println("* Welcome to Hangman *");
        System.out.println("**********************");

        for (int i=0;i<10;i++) {
            System.out.print("Enter a letter: ");
            guess=in.nextLine().charAt(0);

            for (int j=0;i<word.length();j++) {
                if (guess==word.charAt(j)) {
                    guess2.setCharAt(word.charAt(j), guess);
                    System.out.print(guess2);
                }
            }
        }
    }
}

输出:

**********************
* Welcome to Hangman *
**********************
Enter a letter: a
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 97
    at java.lang.AbstractStringBuilder.setCharAt(AbstractStringBuilder.java:380)
    at java.lang.StringBuilder.setCharAt(StringBuilder.java:76)
    at hello.world.HelloWorld.main(HelloWorld.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

3 个答案:

答案 0 :(得分:1)

替换

guess2.setCharAt(word.charAt(j), guess);

guess2.setCharAt(j, guess);

第一个参数是要在StringBuilder中替换的字符的索引,而不是字符本身。

此外,使用for代替i的{​​{1}}循环似乎存在拼写错误。

j

答案 1 :(得分:0)

String.length()返回从1开始而不是从0开始的字符串长度。因此,每当使用String.length()时,总是使用小于(&lt;)符号。

答案 2 :(得分:0)

您可以使用regex + replaceAll方法替换所有内容,而不是使用String builder

for (int i=0;i<10;i++) {
        System.out.print("Enter a letter: ");
        guess=in.nextLine().charAt(0);

        word = word.replaceAll("[^"+ guess +"]", "-");
        System.out.println(word);
    }

<强>结果:

Enter a letter: a
-a----