如何使用java从特定行中选择随机文本值

时间:2017-09-14 18:55:22

标签: java selenium

我有三个输入字段。

  • 名字
  • 最后一项
  • 出生日期

我想从属性文件中获取每个输入的随机数据。 这是属性文件的外观。字段名称和=应该被忽略。

 - 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]));

2 个答案:

答案 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行并且您不希望有数百万个输入,那么应该没问题。