Wie kann ich einen string nach mehreren Zeichen splitten in Java?


27.11.2022, 20:45

In Java

3 Antworten

Ich würde alle >< mit Komma ersetzen, die übrigen < und > (vorne und hinten) entfernen, und dann einfach beim Komma splitten.
Und das erhaltene String-Array dann noch zu einem int-Array mappen.

String input = "<12,3,4><13,5,2><1,2,3>";
int[] array = Stream.of(input.replaceAll("><", ",").replaceAll(">|<", "").split(",")).mapToInt(Integer::parseInt).toArray();

Edit: Man kann auch einfach bei Komma ODER >< splitten.

int[] array = Stream.of(input.replaceAll("^<|>$", "").split(",|(><)")).mapToInt(Integer::parseInt).toArray();
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
import java.util.*;
import java.util.regex.*;

public class MeineKlasse {
	public static void main(String[] args) {
		String input = "<1,23,56><23,67,8><1,2,3>";
		
		// Lösung mit ersetzen:
		String daten = input.replaceAll("[<>]+", ",");
		String[] array1 = daten.split(",");
		System.out.println(Arrays.toString(array1));
		
		// Lösung mit RegEx im split
		String[] array2 = input.split("[<>,]+");
		System.out.println(Arrays.toString(array2));
		
		// Lösung mit Scanner
		Scanner scanner = new Scanner(input);
		int[] array3 = scanner.findAll("\\d+").mapToInt(match -> Integer.parseInt(match.group())).toArray();
		scanner.close();
		System.out.println(Arrays.toString(array3));
		
		// Lösung mit RegEx
		int[] array4 = Pattern.compile("\\d+").matcher(input).results().mapToInt(match -> Integer.parseInt(match.group())).toArray();
		System.out.println(Arrays.toString(array4));
	}
}

Mit einem regulären Ausdruck hast du das schnell gelöst