我有三个输入字段。
我想从属性文件中获取每个输入的随机数据。 这是属性文件的外观。字段名称和=应该被忽略。
- First Name= Robert, Brian, Shawn, Bay, John, Paul
- Last Name= Jerry, Adam ,Lu , Eric
- Date of Birth= 01/12/12,12/10/12,1/2/17
示例:对于名字:文件应从以下名称中随机选择一个名称
Robert, Brian, Shawn, Bay, John, Paul
我还需要在=
之前忽略任何内容FileInputStream objfile = new FileInputStream(System.getProperty("user.dir "+path);
in = new BufferedReader(new InputStreamReader(objfile ));
String line = in.readLine();
while (line != null && !line.trim().isEmpty()) {
String eachRecord[]=line.trim().split(",");
Random rand = new Random();
//I need to pick first name randomly from the file from row 1.
send(firstName,(eachRecord[0]));
答案 0 :(得分:1)
长时间没有编写这样的东西。 随意测试它,让我知道它是否有效。
此代码的结果应该是名为 values
的HashMap对象然后,您可以使用 get(field_name)
从中获取所需的特定字段例如 - values.get(“First Name”)。一定要用来纠正大小写,因为“名字”不起作用。
如果您希望全部为小写,则可以在将字段和值放入HashMap的行末尾添加 .toLowerCase()
import java.lang.Math;
import java.util.HashMap;
public class Test
{
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
// set the value of "in" here, so you actually read from it
HashMap<String, String> values = new HashMap<String, String>();
String line;
while (((line = in.readLine()) != null) && !line.trim().isEmpty()) {
if(!line.contains("=")) {
continue;
}
String[] lineParts = line.split("=");
String[] eachRecord = lineParts[1].split(",");
System.out.println("adding value of field type = " + lineParts[0].trim());
// now add the mapping to the values HashMap - values[field_name] = random_field_value
values.put(lineParts[0].trim(), eachRecord[(int) (Math.random() * eachRecord.length)].trim());
}
System.out.println("First Name = " + values.get("First Name"));
System.out.println("Last Name = " + values.get("Last Name"));
System.out.println("Date of Birth = " + values.get("Date of Birth"));
}
}
答案 1 :(得分:1)
如果你知道你的属性文件中总是只有那3行,我会将每个行放入一个以索引为键的地图中,然后在地图范围内随机生成一个键。
// your code here to read the file in
HashMap<String, String> firstNameMap = new HashMap<String, String>();
HashMap<String, String> lastNameMap = new HashMap<String, String>();
HashMap<String, String> dobMap = new HashMap<String, String>();
String line;
while (line = in.readLine() != null) {
String[] parts = line.split("=");
if(parts[0].equals("First Name")) {
String[] values = lineParts[1].split(",");
for (int i = 0; i < values.length; ++i) {
firstNameMap.put(i, values[i]);
}
}
else if(parts[0].equals("Last Name")) {
// do the same as FN but for lastnamemap
}
else if(parts[0].equals("Date of Birth") {
// do the same as FN but for dobmap
}
}
// Now you can use the length of the map and a random number to get a value
// first name for instance:
int randomNum = ThreadLocalRandom.current().nextInt(0, firstNameMap.size(0 + 1);
System.out.println("First Name: " + firstNameMap.get(randomNum));
// and you would do the same for the other fields
可以使用一些辅助方法轻松地重构代码以使其更清晰,我们将其作为HW分配:)
通过这种方式,您可以随时调用所有值的缓存并获取随机值。我意识到这不是具有嵌套循环和3个不同地图的最佳解决方案,但如果您的输入文件只包含3行并且您不希望有数百万个输入,那么应该没问题。