2012-04-23 116 views
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(); 
     } 
    } 
+0

1號線,將每個個體數是「1 ','1','1','6','2','0'等,還是'1116',2090','100234'等? – 2012-04-23 01:01:59

+0

對於第1行,數字是 - ''1''1116''2090''100234''145106''76523''和對於第2行,數字是 - '''''10107''1008''10187'' – AKIWEB 2012-04-23 01:04:17

回答

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); 
     } 
    } 
} 
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. 
+1

感謝John提供的建議,我用順序讀取文件的代碼更新了我的問題。你可以給一些代碼片段,可以將它們存儲在集合中,然後它會隨機選取它們,通過這些我可以更好地理解。 – AKIWEB 2012-04-23 01:05:24

0

存儲區溢出的變量放到你想擁有的數字集合在文本文件中

+0

考慮重寫你的答案。這不是很清楚。我建議你使用代碼樣式輸入一小段代碼來幫助回答問題。 – MADCookie 2012-04-23 20:00:06