字符串索引超出范围错误:如何修复?

时间:2016-10-03 22:04:56

标签: java string stringbuffer

我正在尝试使用字符串缓冲区混合字符串。程序应该随机选择StringBuffer1(sb1)中单词中的一个字符。将其附加到空StringBuffer2(sb2),并持续执行此操作,直到StringBuffer1(sb1)的sb1.length()等于0(空)。

这是我的代码:

String word = "Hello";
String empty = "";
StringBuffer sb1 = new StringBuffer(word);
StringBuffer sb2 = new StringBuffer(empty);
Random randomChar = new Random();

while (word.length() != 0) {
    int charIndex = randomChar.nextInt(word.length());
    char character = sb1.charAt(charIndex);
    sb2.append(character);
    sb1.deleteCharAt(charIndex);
}

System.out.println(word.length());
System.out.println(word);
System.out.println(sb2);

2 个答案:

答案 0 :(得分:0)

您正在StringBuffer sb1进行更改,而您正在根据String word的长度验证循环。如此。

  1. 您正在创建一个无限循环,
  2. Random号码基于word.length()生成,始终为5。
  3. 使用sb1.length()代替word.length() ,以便sb1的长度用于循环以及随机数。

答案 1 :(得分:-1)

试试这个。由于Random,这可能会比预期循环更多次。

说明:问题与索引有关。当您从字长中选择随机时,您将获得0 - >的元素。 length-1但同时你要从字符串缓冲区中删除元素,所以下次当你得到index = length-1时,它不会出现在字符串缓冲区中,这就是你得到错误的原因。当字符串缓冲区长度变为零时,我也添加了终止条件。

            String word = "Hello";
            String empty = "";
            StringBuffer sb1 = new StringBuffer(word);
            StringBuffer sb2 = new StringBuffer(empty);
            Random randomChar = new Random();

            while (word.length() != 0 && sb1.length() != 0) {
                int charIndex = randomChar.nextInt(word.length());
                if (sb1.length() > charIndex) {
                    char character = sb1.charAt(charIndex);
                    sb2.append(character);
                    sb1.deleteCharAt(charIndex);
                }
            }

            System.out.println(word.length());
            System.out.println(word);
            System.out.println(sb2);