Java for循环获取StringIndexOutOfBoundsException

时间:2017-10-06 05:44:22

标签: java for-loop indexoutofboundsexception

所以我试图将一个字符串(有罪)改成同一个字符串的混乱版本。唯一不随机的是任何双字母必须放在一起。因此,如果我有字符串“药房”,那就必须是“mraacpyh”。我以为我想出来了,但现在我得到一个StringIndexOutOfBoundsException。任何人都可以对我做错了吗?

   String guilty = "";
   String scramble = "";
   if (killer == 0)
     guilty = "pharmacy";
   if (killer == 1)
     guilty = "closet";
   if (killer == 2)
     guilty = "newspaper";
   if (killer == 3)
     guilty = "dollar";
   if (killer == 4)
     guilty = "college";

   while (!guilty.equals("")){
      int i = r.nextInt(guilty.length());
      for (int j = 0; j < guilty.length()-guilty.replace(guilty.substring(i, i+1), "").length(); i++){
      scramble = scramble + guilty.substring(i, i+1);
      }
      guilty = guilty.replace(guilty.substring(i, i+1), "");
      System.out.println(scramble);
      System.out.println(guilty);
   }

1 个答案:

答案 0 :(得分:0)

int i = r.nextInt(guilty.length());

如果有罪'APPLE'我就是5.最后一个字母'E'的索引是4! (第一个char的索引是0) 问题出在这里:

guilty.replace(guilty.substring(i, i+1), "")

如果增加变量i,它将高于字符串的最大索引。我是你的字符串的最大索引。

否则,改组字符串:

import org.apache.commons.lang3.ArrayUtils; //ver.3.6
...
String s = "apple";
char[] chars = s.toCharArray();
ArrayUtils.shuffle(chars);
System.out.print(String.valueOf(chars));