0

我想根据以下模式生成一个随机数:

random.int= pattern="[0-9]{%len%}"   
random.big_integer= pattern="[0-9]{%len%}"  
random.long= pattern="[0-9]{%len%}"   
random.string= pattern="[A-Z][a-z]{0,%len%}"  
random.char= pattern="[A-Z]{1}"  
random.byte= pattern="[A-Z][0-9]{1}"  
random.short= pattern="[0-9]{%len%}"  
random.float= pattern="[0-9]{%len%}\\.[0-9]{%scl%}"  
random.double= pattern="[0-9]{%len%}\\.[0-9]{%scl%}"  
random.big_decimal= pattern="[0-9]{%len%}\\.[0-9]{%scl%}"  

所以,我的输入将是“len”、“scl”和数据类型。基于这些输入,我将不得不读取相应的模式并生成输出。对于单次运行期间的每个调用,此输出应该是随机的。如果我重新运行程序,输出应该是相同的。

在 JAVA 中实现这一目标的最佳方法是什么?

例如,如果我调用 generateRandomOutput("float",5,2) [datatype,length,scale] 我的输出应该有一个随机浮点数,例如:21453.67(这基于上述模式“random.float” )

4

5 回答 5

1

简单来说,就是换个基地。Math.random您可以通过获取 a并乘以 26来生成随机字符,结果会告诉您随机字母在字母表中的位置( [A-Z])。

获取具有两个随机字符的字符串需要乘以 26^2 并将数字更改为以 26 为底(或者,将随机数乘以 26 两次)。

于 2012-10-14T18:43:29.880 回答
1

试用快速检查

它为您提供了出色的原始生成器

于 2012-10-14T19:13:26.760 回答
0

如果我重新运行程序,输出应该是相同的。

听起来你真的不希望它是随机的吗?

查看一种方法散列函数,如 MD5、SHA 等。

于 2012-10-14T19:53:24.263 回答
0

不可能确定符合正则表达式的所有可能字符串,只有一些简单的正则表达式,例如您拥有的。因此,我怀疑是否有图书馆可以帮助您。

我建议您使用自己的更简单的格式,例如A=> AZ、a=> az、d=> 0-9、nnn 作为重复,任何其他字符作为本身。

ef 而不是

random.byte= pattern="[A-Z][0-9]{1}" 

我会

random.byte.pattern=Ad

这将更容易解析。

于 2012-10-14T19:46:15.920 回答
0

首先,您需要一个可以“播种”的随机数生成器,这样您就可以在每次运行时提供相同的种子,以便运行可重现。您可以播种 java.util.Random。

接下来,我建议您编写一个标准例程,给定一个长度和一个字母,将提供一个包含那么多随机字符的字符串。然后为您的每种数据类型编写例程以调用公共例程来获取字符串,并将它们转换为所需的类型。

标准程序相当简单:

  • 接收长度和字母参数。

  • 从您的 RNG 中获取下一个随机整数。

  • 取随机整数并计算字母表长度的模数。

  • 使用模数从字母表中选择下一个字符 - 将其推入结果字符串。

  • 重复直到你积累了指定数量的字符。

在特定类型的例程中,您使用适当的参数调用上述常用函数(两次,插入“.”,用于浮点/双精度/大十进制),然后使用 Datatype.getDatatype(替换适当的数据类型名称)转换结果字符串为正确的类型。因此,特定于类型的例程大多是“样板”。

传递给通用例程的“字母表”是数字类型“0123456789”,“字符”类型是“ABCD..WXYZ”,“字节”类型是“ABCD..WXYZ0123..789”(或者你打算因为它是“0123456789ABCDEF”?)。

于 2012-10-14T19:15:39.647 回答