Próbuję podjąć ciągów współrzędnych i przekształcić je do tablicy liczby całkowitej tablicy, jak widać poniżej: Myline (ciąg): 1-2 9-5 4-5 3-6 5-9 Pożądane wyjście: [[1 , 2], [9,5], [4,5], [3,6], [5,9]] ...

1
Its Andrew 15 marzec 2021, 20:05

3 odpowiedzi

Najlepsza odpowiedź

Jesteś na właściwym miejscu. Jednak wydaje się, że próbujesz zrobić zbyt wiele na raz. Polecam to krok po kroku. Najpierw musimy podzielić String do par współrzędnych:

String[] split1 = input.split(" ");

Następnie możemy pętli przez tę tablicę i podzielić każdy przedmiot:

String[] split2 = split1[i].split("-");

Wreszcie możesz uzyskać wynik:

result[i][0] = Integer.parseInt(split2[0]);
result[i][1] = Integer.parseInt(split2[1]);

Więc ostateczne rozwiązanie wyglądałoby tak:

String[] split1 = input.split(" ");

for (int i = 0; i < split1.length; i++) {

    String[] split2 = split1[i].split("-");

    result[i][0] = Integer.parseInt(split2[0]);
    result[i][1] = Integer.parseInt(split2[1]);
}

Alternatywnie, jeśli chcesz czegoś krótszego, można podzielić zarówno przez przestrzeń, jak i - znaki i zrób coś w ten sposób:

String[] split = input.split("[ |-]");
for (int i = 0; i < split.length; i+=2) {

    result[i / 2][0] = Integer.parseInt(split[i]);
    result[i / 2][1] = Integer.parseInt(split[i + 1]);
}

Jest to jednak prawdopodobnie zbyt skomplikowane dla tego przypadku użycia.

2
Henry Twist 15 marzec 2021, 17:21

Coś w tym stylu

String[] temp_split = myLine.split(" ");
int [][] result = new int[temp_split.length][2];
for (int i = 0; i < result.length; i++) {
  String[] temp_split2 = myLine.split("-");
  result[i][0] = Integer.parseInt(temp_split2[0])
  result[i][1] = Integer.parseInt(temp_split2[1])
}  
0
idan ovadia 15 marzec 2021, 17:13

Jest to idealna sytuacja do używania strumieni.

  • podzielone na jedną lub więcej przestrzeni
  • Podziel każdą z tych par na - i przekonwertuj na int
  • Zwróć tablicę każdej pary
  • i zwróć wszystkie pary jako tablicę tablic.
String s = "1-2 9-5 4-5 3-6 5-9";

int[][] pairs = Arrays.stream(s.split("\\s+"))
        .map(pair -> Arrays.stream(pair.split("-"))
                .mapToInt(Integer::parseInt).toArray())
        .toArray(int[][]::new);

System.out.println(Arrays.deepToString(pairs));

Wydruki

[[1, 2], [9, 5], [4, 5], [3, 6], [5, 9]]
0
WJS 15 marzec 2021, 18:08