Java: String nicht splitten wenn Zeichen innerhalb anderer Zeichen ist?
Hallo, ich möchte in Java einen String zu einem String[] zerteilen. Erstmal sage ich was ich machen möchte. Ich möchte bestimmte Werte in einer Datei abspeichern. Diese Datei sieht so aus:
abc="1+1=2"
Wenn ich das jezt in einem String speichere und zerteilen möchte habe ich es erst bei jedem Gleichzeichen gesplittet mit .split("=");. Aber hier ist es der Fall dass das Gleichzeichen das sich zwischen den Anführungsstrichen befindet nicht mitgezählt werden soll. Wie kann ich das machen? Also der String[] soll am Ende so aus sehen:
[0]=abc
[1]="1+1=2"
LG
Diese Datei sieht so aus:
An dieser Stelle meinte ich den Inhalt der Datei
4 Antworten
Du kannst als zweiten Parameter ein Limit angeben. Dann wird der String nur beim ersten IstGleich gesplittet.
.split("=", 2);
Ok das wuste ich noch garnicht, ich probiere es jezt aus
Bei mir hat dieser Regex am besten funktioniert:
input.split("=?\"\\R?");
Also der String wird nicht beim Gleich-Zeichen, sondern bei Anführungszeichen mit einem optionalen führenden Gleich-Zeichen und einem optionalen nachfolgenden Zeilenumbruch getrennt.
Aus dem:
abc="1+2=3"
def="4+5=9"
ghi="10+11=21"
wird das:
[abc, 1+2=3, def, 4+5=9, ghi, 10+11=21]
Wichtig ist dabei halt, dass das Anführungszeichen direkt nach dem Gleich kommt.
Du kannst dafür einen Regex verwenden, der sowohl das Gleichheitszeichen als auch den Zeilenumbruch matcht.
String[] arr = "abc=\"test1\"\nabcd=\"test2\"".split("[=\\n]");
(Gutefrage formatiert hier die Backslashes ein wenig falsch. Dies ist der eigentliche Regex: [=\\n])
In arr ist dann folgendes enthalten:
[abc, "test1", abcd, "test2"]
Du könntest es mit regulären Ausdrücken versuchen. Dafür gibt es die Klassen Pattern und Matcher.
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html
Mein Programm crasht dabei leider mit der Meldung: