如何为字符串数组获取10个随机字符串?

时间:2017-01-01 18:08:40

标签: java arrays string java.util.scanner

大家好我想知道如何在java中的数组中创建一个从一组字符串(大约96个字符串)中随机取出10个字符串的方法...

字符串是从文本文件中获取的 我已经创建了一个方法来读取文件并将变量赋给行 我也创建了一系列问题

这是我读取文件和创建问题数组的代码

q是问题

选择

b ....

cA是正确答案

public static Question[] readAllQuestions() throws FileNotFoundException {
    int numberOfQuestions = CountQuestions();
    Question [] allQuestions = new Question[numberOfQuestions];
    Scanner file = new Scanner (new File("TestBank.txt"));
    String q = "";
    String aa = "";
    String bb = "";
    String cc = "";
    String dd = "";
    String ccA = "";
    int x = 0 ; 
    int k = 0 ; 
    while (x< (allQuestions.length-1)) {
        while (file.hasNext() && k == 0) {
            String ques[] = file.nextLine().split(" ");
            for (int ww = 0 ; ww< ques.length ; ww++) {
                q += ques[ww];
                q+=" ";
            }
            if(ques[0].equals("")) {
                k++ ; 
            }
        }
        while (k == 1) {
            String a[] = file.nextLine().split(" ");
            for (int ww = 0; ww< a.length; ww++) {
                aa += a[ww];
                aa+= " ";
            }
            if(a[0].equals("")) {
                k++ ;
            }
        }
        //file.hasNext() &&
        while (k == 2) {
            String b[] = file.nextLine().split(" ");
            for (int ww = 0 ; ww< b.length ; ww++) {
                bb += b[ww];
                bb+= " ";
            }
            if(b[0].equals("")) {
                k++;
            }
        }
        while (k == 3) {
            String c[] = file.nextLine().split(" ");
            for (int ww = 0; ww<c.length; ww++) {
                cc += c[ww];
                cc+= " ";
            }
            if(c[0].equals("")) {
                k++;
            }
        }
        while (k == 4) {
            String d[] = file.nextLine().split(" ");
            for (int ww = 0; ww< d.length; ww++) {
                dd += d[ww];
                dd+= " ";
            }
            if(d[0].equals("")) {
                k++;
            }
        }
        while (k == 5) {
            String cA[] = file.nextLine().split(" ");
            for (int ww = 0; ww<cA.length; ww++) {
                ccA += cA[ww];
                ccA += " ";
            }
            if(cA[0].equals("")) {
                k++;
            }
        }
        while (k == 6) {
            Question question = new Question(q,aa,bb,cc,dd,ccA);
            allQuestions[x] = question;
            q="";
            aa="";
            bb="";
            cc="";
            dd="";
            ccA="";
            x++;
            k=0;
        }
    } 
    return allQuestions;
} 

任何想法? 感谢

2 个答案:

答案 0 :(得分:2)

在我看来,你想要一个字符串数组中的10个随机字符串而不选择重复字符串。实现此目的的一种简单方法是使用Collections::shuffle随机置换元素,然后选择随机列表的子集。这是一个例子:

public static void main(String[] args) throws Exception
{
    String[] exStringArray = IntStream.range(0, 96)
            .mapToObj(Integer::toString)
            .toArray(size -> new String[size]);

    System.out.println(getRandomElements(Arrays.asList(exStringArray), 10));
}

private static <T> Collection<T> getRandomElements(Collection<T> c, int maxElements)
{
    List<T> deepCopiedList = new ArrayList<>(c);
    Collections.shuffle(deepCopiedList);
    return Collections.unmodifiableList(deepCopiedList.subList(0, Math.max(Math.min(deepCopiedList.size(), maxElements), 0)));
}

答案 1 :(得分:0)

您可以使用随机类。 array[random.nextInt(array.length)]0array.length - 1之间的任何数字提供索引的数组元素,因为nextInt方法中排除了最后一个索引。

public static String[] getRandomStrings(String [] mainStrings, int i) {
    String [] randomStrings = new String[i];
    Random random = new Random();
    for(int index = 0; index < i ; index++){
        randomStrings[index] = mainStrings[random.nextInt(mainStrings.length)];
    }
    return randomStrings;
}