将字符串变量随机拆分为指定长度的子字符串

3

在Java中,应该使用随机数生成器返回一个指定长度的随机选取子字符串。如果长度为负数或大于文本长度,则该方法应抛出IllegalArgumentException异常。例如,chooseSubstring("abcde", 4, new Random()) 应该大约一半的时间返回 "abcd",另一半的时间返回 "bcde"。

public static String chooseSubstring (String text, int length, Random rand)
{
    int randomNum = rand.nextInt(length);
    String answer = text.substring(randomNum);
    return answer;
}

基本上,我想从变量text中返回一个子字符串。这个子字符串的长度必须与变量长度相同。这个子字符串的开头应该从一个由随机数生成器确定的随机位置开始。我的问题是,随机数生成器没有确保子字符串的长度是正确的。

        System.out.println(chooseSubstring("abcde", 4, new Random()));

应该让abcdbcde的出现频率大致相同,但实际上返回了以下结果: bcde cde de abcde。 如果有任何解决此问题的信息,将非常有帮助,谢谢!

randomNum 是一个从 0length(不包括 length)的值。它将是 0、1、2 或 3 中的一个。 - Elliott Frisch
1个回答

2

您的代码在0到length之间的随机索引处截取了一个子字符串,但必须指定结束索引以避免延伸到字符串的结尾。您还需要减少起始索引的范围,以使结束索引不超过字符串:

int randomNum = rand.nextInt(text.length() - length + 1);
String answer = text.substring(randomNum, randomNum + length);

你的答案每次只返回完整的字符串。 - Zachary King
@ZacharyKing 已修复。 - shmosel
哦,你使用了另一种使用子字符串的方法。因此,它不仅使用起始点,还使用长度作为结束点。现在看起来很明显,谢谢你的帮助! - Zachary King

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接