1

下面是文本文件,我想通过以某种随机顺序打印行中的每个数字来以某种随机方式读取每一行。我可以逐行读取每一行,然后按顺序打印与每一行对应的数字,但是有什么方法可以以某种随机方式读取行,以便我可以以某种随机顺序打印所有数字。

 Line1   1  1116    2090    100234  145106  76523
 Line2   1  10107   1008    10187
 Line3   1  10107   10908   1109

任何建议将不胜感激。下面是我编写的代码,它将按顺序读取该行。

BufferedReader br = null;

    try {
        String sCurrentLine;

        br = new BufferedReader(new FileReader("C:\\testing\\Test.txt"));

        while ((sCurrentLine = br.readLine()) != null) {
            String[] s = sCurrentLine.split("\\s+");
            for (String split : s) {
                if(split.matches("\\d*"))
                System.out.println(split);
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)br.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
4

3 回答 3

4

你不能“以某种随机的方式阅读一行”(嗯,你可以,但这会很可怕!)

我建议将所有行按顺序读入一个集合,然后一次(随机)挑选出 1 行,直到集合为空。

您可以以类似的方式单独处理每一行:将所有数字解析为一个集合,然后将它们随机拉出。

例如(伪代码)

ArrayList lines = new ArrayList()
while (! EOF)
    lines.append(readLine)

while(lines.size() > 0)
    int index = Random(0, lines.size)
    line = lines[index];
    lines.remove(index)
    processLine(line)
    // processLine does a similar thing to the above but with numbers
    // on a line rather than lines in a file.
于 2012-04-23T00:58:53.667 回答
1

如果你想重新排列每一行的顺序,你可以使用 Collections.shuffle:

while ((sCurrentLine = br.readLine()) != null) {
    List<String> s = Arrays.asList(sCurrentLine.split("\\s+"));
    Collections.shuffle(s);
    for (String split : s) {
        if (split.matches("\\d*")) {
            System.out.println(split);
        }
    }
}

这将按顺序打印行,但每行中的数字将被打乱。

如果要打乱行的顺序,只需将每一行添加到一个ArrayList<List<String>>,打乱 ArrayList,然后打乱每一行:

ArrayList<List<String>> allLines = new ArrayList<List<String>>();
while ((sCurrentLine = br.readLine()) != null) {
    allLines.add(Arrays.asList(sCurrentLine.split("\\s+")));
    Collections.shuffle(allLines);
    for (List<String> s : allLines) {
        Collections.shuffle(s);
        for (String split : s) {
            if(split.matches("\\d*"))
            System.out.println(split);
        }
    }
}
于 2012-04-23T02:01:59.217 回答
0

将溢出的变量存储到您希望在文本文件中收集数字的类型的数组列表或数组中

于 2012-04-23T01:19:52.603 回答