2015-03-20 2 views
1

Набор данных выглядит следующим образом.JAVA: рандомизированные данные, собранные и разбитые на массив

04/01/12#PNW-1234#PA/1234#10 
15/01/12#BSE-5566#bT/4674#[email protected] 
08/02/12#PNE-3456#Xk/8536#[email protected] 
07/03/12#PEA-4567#ZR/7413#3 
09/03/12#ESE-6329#HY/7195#[email protected] 
03/04/12#ESE-5577#LR/4992#12 
23/04/12#PNW-1235#HY/7195#[email protected] 
09/05/12#ESE-6329#PV/5732#6 
25/05/12#BSE-5566#PV/5732#[email protected] 
08/06/12#PNE-3457#kD/9767#1 
31/06/12#EMI-6329#ZR/7413#[email protected] 
03/07/12#EMI-6329#PV/5732#12 
25/07/12#BSE-5566#bT/4674#[email protected] 
08/08/12#ENE-5789#DT/9489#8 
21/08/12#ESE-6329#PV/5732#30 
27/08/12#PEA-4567#PV/5732#[email protected] 
11/09/12#ESE-5577#Xk/8536#2 
14/09/12#PNW-1235#HY/7195#[email protected] 
16/10/12#PSE-3478#bT/4674#1 
27/10/12#EMI-6329#kD/9767#[email protected] 
19/11/12#ESE-5577#bT/4674#[email protected] 
21/12/12#EMI-6329#PV/5732#[email protected] 
04/01/13#BNW-4799#kD/9767#12 
09/01/13#PNW-1234#ZR/7413#15 
25/01/13#BNE-3458#kD/9767#[email protected] 
07/02/13#PNE-3457#Au/9271#5 
12/02/13#EMI-1267#bT/4674#[email protected] 
02/03/13#BSE-5566#Au/9271#25 
14/03/13#PSE-3478#PV/5732#[email protected] 
04/04/13#ENE-5789#HY/7195#10 
16/04/13#PEA-7890#LR/4992#1 
25/04/13#BEA-7891#DT/9489#[email protected] 
05/05/13#BNW-4799#Xk/8536#2 
15/05/13#PSC-1235#ZR/7413#2 
30/05/13#PNW-1235#Au/9271#[email protected] 
14/06/13#PSE-3478#bT/4674#1 
22/06/13#EMI-6329#LR/4992#[email protected] 

Так что этот метод, который я читаю из файла и возвращает значения, которые перед @ в текстовом файле, так как на @, где начинается новый месяц.

public static String[] readPurchaseOrderDataFile(Scanner fileScan) { 
     final String DELIMITER = "@"; 
     try { 
      ArrayList<String> pbm = new ArrayList(); 
      while (fileScan.hasNext()) { 
       fileScan.useDelimiter(DELIMITER); 
       String purchaseOrderByMonth = fileScan.next(); 
       pbm.add(purchaseOrderByMonth); 
       return pbm.toArray(new String[pbm.size()]); 
      } 

     } catch (Exception e) { 
      System.out.println(e); 
     }return null; 

    } 

В моем основном методе я это

for (int i = 0; i < 12; i++) { 
      String[] textStr = InputFileData.readPurchaseOrderDataFile(pScan); //Brings list in by months 
      String[] purchaseOrder = textStr[0].split("\\s+"); 

      for (String first : purchaseOrder) { 
       String[] result = first.split("#"); 
       System.out.println(Arrays.toString(result)); 

      } 

каждый бит информации, разделенной на # должны быть сохранен в массиве. На самом деле это не хранение информации, как мне бы хотелось.

+0

что делает его хранить в массиве? можете ли вы показать нам свой результат и ожидаемый результат? –

+0

сделано, я хочу вернуть его к основному методу, разбитому на месяцы. (@), далее разделите его на #, а затем добавьте каждую часть в массив –

+0

, так что до @ будет собираться в массив, и каждый элемент массива будет прокручиваться на #, я получил это право? –

ответ

0

Первая фаза разделения (символ «разделитель») прекрасна, вам просто нужно избавиться от этих символов пробела для следующего разделения фазы (символ '#' разделителя).

Если ваш файл не слишком велик, что требует серьезной оптимизации кода, тогда вы можете переместить всю обработку входных файлов в этот метод и изменить метод для возврата 2-мерного массива (или списка массивов) вместо простой/1-мерный массив. Таким образом, у вас будет один структурированный объект, который представляет все входные данные, тогда будет легче перемещать данные для последующей обработки.

public static List<String[]> readPurchaseOrderDataFile(Scanner fileScan) { 
    final String DELIMITER = "@"; 
    List<String[]> pbm = new ArrayList<String[]>(); 
    try { 
     fileScan.useDelimiter(DELIMITER); 
     while (fileScan.hasNext()) { 
      String purchaseOrderByMonth = fileScan.next(); 
      // replace all white-space with "#" separator character. 
      String phase1 = purchaseOrderByMonth.replaceAll("\\s+", "#"); 
      String phase2; 
      if (phase1.length() > 0 && phase1.charAt(0) == '#') { 
       // get rid of the white-space after the "@" seperator 
       phase2 = phase1.substring(1); 
      } else { 
       phase2 = phase1; 
      } 
      pbm.add(phase2.split("#")); 
     } 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
    return pbm; 
} 

Пример вызова:

List<String[]> textArrs = readPurchaseOrderDataFile(scanner); 
    for (String[] textArr : textArrs) { 
    System.out.println(Arrays.toString(textArr)); 
    } 

Выход:

[04/01/12, PNW-1234, PA/1234, 10, 15/01/12, BSE-5566, bT/4674, 5] 
[08/02/12, PNE-3456, Xk/8536, 1] 
[07/03/12, PEA-4567, ZR/7413, 3, 09/03/12, ESE-6329, HY/7195, 30] 
[03/04/12, ESE-5577, LR/4992, 12, 23/04/12, PNW-1235, HY/7195, 2] 
[09/05/12, ESE-6329, PV/5732, 6, 25/05/12, BSE-5566, PV/5732, 10] 
[08/06/12, PNE-3457, kD/9767, 1, 31/06/12, EMI-6329, ZR/7413, 10] 
[03/07/12, EMI-6329, PV/5732, 12, 25/07/12, BSE-5566, bT/4674, 5] 
[08/08/12, ENE-5789, DT/9489, 8, 21/08/12, ESE-6329, PV/5732, 30, 27/08/12, PEA-4567, PV/5732, 3] 
[11/09/12, ESE-5577, Xk/8536, 2, 14/09/12, PNW-1235, HY/7195, 2] 
[16/10/12, PSE-3478, bT/4674, 1, 27/10/12, EMI-6329, kD/9767, 10] 
[19/11/12, ESE-5577, bT/4674, 8] 
[21/12/12, EMI-6329, PV/5732, 6] 
[04/01/13, BNW-4799, kD/9767, 12, 09/01/13, PNW-1234, ZR/7413, 15, 25/01/13, BNE-3458, kD/9767, 4] 
[07/02/13, PNE-3457, Au/9271, 5, 12/02/13, EMI-1267, bT/4674, 5] 
[02/03/13, BSE-5566, Au/9271, 25, 14/03/13, PSE-3478, PV/5732, 3] 
[04/04/13, ENE-5789, HY/7195, 10, 16/04/13, PEA-7890, LR/4992, 1, 25/04/13, BEA-7891, DT/9489, 10] 
[05/05/13, BNW-4799, Xk/8536, 2, 15/05/13, PSC-1235, ZR/7413, 2, 30/05/13, PNW-1235, Au/9271, 1] 
[14/06/13, PSE-3478, bT/4674, 1, 22/06/13, EMI-6329, LR/4992, 8]