下面是文本文件,我想通过以某种随机顺序打印行中的每个数字,以某种随机的方式读取每一行。我可以逐个读取每一行,然后按顺序打印每行对应的数字,但是有什么办法我们可以用一些随机的方式读取行,这样我就可以按随机顺序打印所有数字。
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();
}
}
答案 0 :(得分:4)
你不能“以某种随机方式读取一行”(好吧,你可以,但它会很可怕!)
我建议你将所有的行顺序读入一个集合中,然后一次一个地(随机)挑出它们直到集合为空。
您可以以类似的方式单独处理每一行:将所有数字解析为一个集合,然后随机将它们拉回来。
e.g。 (伪代码)
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.
答案 1 :(得分: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);
}
}
}
答案 2 :(得分:0)
将您的split变量存储到某些arraylist或您希望在文本文件中包含数字集合的数组中