我想基于如下模式生成一个随机数:
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”)
答案 0 :(得分:1)
简单地说,这是基础的变化。您可以通过获取Math.random
并乘以26来生成随机字符,结果会告诉您字母表中随机字母的位置([A-Z]
)。
获取带有两个随机字符的字符串需要乘以26 ^ 2并将数字更改为26(或者,将随机数乘以26两次)。
答案 1 :(得分:1)
它为您提供了很棒的primitive generators。
答案 2 :(得分:0)
首先,您需要一个可以“播种”的随机数生成器,因此您可以在每次运行时提供相同的种子,以便运行可重现。你可以播种java.util.Random。
接下来,我建议你编写一个标准例程,给定长度和字母表,将提供一个包含许多随机字符的字符串。然后为每个数据类型编写例程以调用公共例程来获取字符串,并将它们转换为所需的类型。
标准例程非常简单:
接收长度和字母表参数。
从您的RNG获取下一个随机整数。
取随机整数并计算字母表长度的模数。
使用模数从字母表中选择下一个字符 - 将其推入结果字符串。
重复,直到累积了指定数量的字符。
在类型特定的例程中,使用正确的parms调用上面的常用函数(两次,插入“。”,用于float / double / big decimal),然后使用Datatype.getDatatype(替换相应的数据类型名称)将结果字符串转换为正确的类型。因此,特定类型的例程主要是“样板”。
传递给公共例程的“字母”是“0123456789”数字类型,“ABCD..WXYZ”表示“char”类型,“ABCD..WXYZ0123..789”表示“字节”类型(或你打算将它作为“0123456789ABCDEF”吗?)。
答案 3 :(得分:0)
不可能确定所有符合正则表达式的可能字符串,只能确定一些简单的正则表达式。因此,我怀疑有一个图书馆可以帮助你。
我建议您使用更简单的格式,例如A
=> A-Z,a
=> a-z,d
=> 0-9,nnn表示重复,任何其他字符作为自身。
E.F。而不是
random.byte= pattern="[A-Z][0-9]{1}"
我会
random.byte.pattern=Ad
解析起来要简单得多。
答案 4 :(得分:0)
如果我重新运行程序,输出应该相同。
听起来你真的不希望它随机?
查看单向散列函数,如MD5,SHA等。