2017-09-26 144 views
2

在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; 
} 

基本上,我想从变量文本返回一个字符串。子字符串必须是可变长度的长度。这个子字符串的开始应该从由随机数发生器确定的随机位置开始。我的问题是,随机数发生器不能确保子字符串是正确的长度。

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

应该返回abcdbcde大约相同数量的时间。相反,它正在返回: bcde cde de abcde。 有关如何解决这个问题的任何信息将大大帮助谢谢!

+0

'randomNum'是从'0'到'length'(不包括)的值。它将是0,1,2或3中的一个。 –

回答

1

您的代码正在取一个0到length之间的随机索引的子字符串,排他性。您必须指定结束索引,以便它不会扩展到字符串的末尾。您还需要缩小起始索引的范围,以便末尾索引不会超过字符串:

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

用您的答案,它每次只返回完整的字符串。 –

+0

@ZacharyKing固定。 – shmosel

+0

哦,你正在使用其他方式使用子字符串。因此,不仅仅是出发点,它还使用长度作为结束点。这似乎很明显,现在感谢您的帮助! –

相关问题