Потоки и массивы в java - PullRequest
       26

Потоки и массивы в java

0 голосов
/ 03 августа 2020

У меня есть два образца текста и два кода, которые я хочу объединить, чтобы получить один результат. можем ли мы создать два массива с разной длиной?

начиная с первого:

   public static void main(String[] args) throws IOException {
    Path path = Paths.get("C:/Test.txt");
    List<String[]> data = new ArrayList<>();
    AtomicReference<String> g1 = new AtomicReference<>("");
    Files.lines(path) // UTF-8 file
            .map(line -> line.split("\\s+"))
            .filter(arr -> arr.length == 3)
            .filter(arr -> arr[0].startsWith("A-")
                            || (arr[0].isEmpty() 
                            && !data.isEmpty()))
            .forEach(
                arr -> {
                    if (!arr[0].isEmpty()) {
                        g1.set(arr[0]);
                    }
                    System.out.printf("%-7s %5s %5s%n", 
                                      g1, arr[1], arr[2], arr[3]);
                    arr[0] = g1.get();
                    data.add(arr);
            });

    for (String[] ary : data) {
        System.out.println(Arrays.toString(ary));
    }
}

образец текста выглядит так:

START                              
                                   
ELEMENT                            
                                   
G1      G2      G3                 
A-0     FX      0                  
        FX      1                  
A-20    FY      0                  
        FY      1                  
                                   
END 

второй код :

        public static void main(String[] args) throws IOException {
    Path path = Paths.get("C:/Test.txt");
    List<String[]> data = new ArrayList<>();
    AtomicReference<String> g1 = new AtomicReference<>("");
    Files.lines(path) // UTF-8 file
            .map(line -> line.split("\\s+"))
            .filter(arr -> arr.length == 4)
            .filter(arr -> arr[0].startsWith("A-")
                            || (arr[0].isEmpty() 
                            && !data.isEmpty()))
            .forEach(
                arr -> {
                    if (!arr[0].isEmpty()) {
                        g1.set(arr[0]);
                    }
                    System.out.printf("%-7s %5s %5s%n", 
                                      g1, arr[1], arr[2], arr[3]);
                    arr[0] = g1.get();
                    data.add(arr);
            });

    for (String[] ary : data) {
        System.out.println(Arrays.toString(ary));
    }
} 

образец текста 2 выглядит так:

DATA                           
                            
VRRP                        
                            
G1    G4   G5    G6         
A-0   2    B24   96         
                            
   P1   P2      P3        
   VC           NO          
                            
G1    G4   G5   G6          
A-20  5    C52  96          
                            
   P1   P2      P3        
   VC           NO          
                            
END 

Я хочу сразу получить результат, приведенный ниже, путем объединения двух образцов текста и их кодов (text1 и text2) вместе.

A-0     FX      0   
A-0     FX      1   
A-20    FY      0   
A-20    FY      1   
A-0     2      B24  
A-20    5      C52 

спасибо

1 Ответ

0 голосов
/ 03 августа 2020

можем ли мы объединить два массива разной длины?

Это не прямой ответ на ваш вопрос, но вы можете объединить массивы разной длины следующим образом:

String[] one = {"0", "1", "2", "3", "4"};
String[] two = {"9", "8", "7", "6", "5", "4", "3", "2", "1", "0"};

String[] concatenated = new String[Math.max(one.length, two.length)];

for (int i = 0; i < one.length || i < two.length; i++)
{
    concatenated[i] = "";

    if (i < one.length)
        concatenated[i] = concatenated[i] + one[i];

    if (i < two.length)
        concatenated[i] = concatenated[i] + two[i];
}

System.out.println(Arrays.toString(concatenated));

Вывод: [09, 18, 27, 36, 45, 4, 3, 2, 1, 0]

...