JAVA: рандомизированные данные собираются и разбиваются на массивы

1

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

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@

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

  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
    Готово, я хочу вернуть его в основной метод, разделенный по месяцам. (@) затем разделить его на # и затем добавить каждую часть в массив
Показать ещё 7 комментариев
Теги:
arrays
arraylist

1 ответ

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]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню