我正在尝试对字符串的两个随机字母进行加扰,该字符串不是第一个字母,也不是最后两个字母。编译时出现“字符串索引超出范围”错误。我尝试过讨论许多不同的解决方案,但是似乎没有任何效果。
对于此分配,我们必须使用方法和.charAt命令。我试过为两个随机字符创建变量,然后将它们重新添加到翻转的字符串中,但也无法正常工作。
public static String scramble(String input) {
int range = input.length() - 3;
int place = (int)(Math.random() * range);
String newWord = "";
newWord = input.substring(0, place);
newWord = newWord + newWord.charAt(place) + 2;
newWord = newWord + newWord.charAt(place) + 1;
return newWord;
我期望一个字符串的输出,其中有两个字符被打乱。例如,“神奇”将是“幻想”或“疯狂”。
答案 0 :(得分:0)
您这样做:
newWord = input.substring(0, place);
因此newWord
中的索引从0
到place-1
然后,您可以这样做:
newWord.charAt(place);
但是此索引在您的String中不存在。是Out of Bound
请参见the doc
答案 1 :(得分:0)
创建newWord = input.substring(0, place)
时,该字符恰好具有place
个字符。您无法从中请求charAt(place)
,最后一个字符位于place-1
。
如果要交换字符,请将输入转换为char[]
并生成随机索引以进行交换。
String input = "Fantastic";
// random constraints
int min = 1;
int max = input.length() - 3;
// random two characters to swap
int from = min + (int) (Math.random() * max);
int to;
do {
to = min + (int) (Math.random() * max);
} while (to == from); // to and from are different
// swap to and from in chars
char[] chars = input.toCharArray();
char tmp = chars[from];
chars[from] = chars[to];
chars[to] = tmp;
String result = new String(chars);
System.out.println(result); // Ftntasaic
答案 2 :(得分:0)
您可以尝试
public static String scramble(String input) {
if(input.length() >3){
int range = input.length() - 3;
int place = 1+ new Random().nextInt(range) ;
input=input.substring(0, place) +input.charAt(place + 1)+input.charAt(place) +input.substring( place+2);
}
return input;
}
输入:很棒 输出:狂热,致命,狂热
答案 3 :(得分:0)
尝试这样的事情:
public static String scramble(String input) {
int range = input.length() - 3;
int place = (int)(Math.random() * range);
String newWord = input.substring(0, place);
newWord = newWord + input.charAt(place + 1);
newWord = newWord + input.charAt(place);
// if you need the whole input, just 2 characters exchanged, uncomment this next line
// newWord = newWord + input.substring(place + 2, range);
return newWord;
}