【问题标题】:Split a String variable into a random substring with a specified length将字符串变量拆分为具有指定长度的随机子字符串
【发布时间】:2017-09-26 01:20:34
【问题描述】:

在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(不包括)的值。它将是 0、1、2 或 3 之一。

标签: java string random


【解决方案1】:

您的代码在 0 和 length 之间的随机索引处获取子字符串,排他性。您必须指定结束索引,以便它不会延伸到字符串的末尾。您还需要减少起始索引的范围,以便结束索引不会超过字符串:

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

【讨论】:

  • 有了你的答案,它每次只返回完整的字符串。
  • @ZacharyKing 已修复。
  • 哦,您正在使用另一种使用子字符串的方式。因此,它不仅使用起点,还使用长度作为终点。现在看起来很明显,感谢您的帮助!
猜你喜欢
  • 2015-02-13
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多