Also, wenn es immer genauso aufgebaut ist, und kein RegEx erforderlich ist, könntest du es so machen:
String test = "Hallo;wie;geht;es;Dir";
String array[] = new String[5];
char delimiter = ';';
int index = 0;
for (int i = 0; i < test.length(); i++) {
String s = "";
for (; i < test.length() && test.charAt(i) != delimiter; i++) {
s += test.charAt(i);
}
array[index++] = s;
}
for (String s : array) {
System.out.print(s + " ");
}
System.out.println();
Dabei könnten ein paar Sachen auch geändert werden, i < test.length(); ist zB Geschmackssache.
Natürlich kann man auch eine Methode aufrufen, die schon ein fertiges Array liefert, wie String.split. Wenn du dir die Implementierung dieser Methode ansiehst, findest du bestimmt auch eine Schleife - du rufst sie nur indirekt auf.
Du musst ganz klar unterscheiden zwischen der Zuweisung eines kompletten Arrays zu einer Array-Variable und der Zuweisung zu einem Element eines existierenden Arrays. Der Unterschied ist so ungefähr wie wenn dir Möbel-Walther eine komplette Kommode liefert, und wenn du etwas in ein Fach der existierenden Kommode legst.
Was @CyborgBeta da vorschlägt, funktioniert nur in deinem speziellen Anwendungsfall, insbesondere musst du vorher wissen, wieviele Elemente du erwartest (oder mit einer anderen Schleife vorher zählen). Es ist gut zu verstehen, wie man etwas wie String.split selber schreiben kann, aber wenn es genau für den eigenen Anwendungsfall schon eine zehntausendfach getestete und bequeme API-Methode gibt, sollte man die vorziehen.
nochmal für evtl. Lerneffekte, wenn auch immer fraglicher nach schon einiger Zeit im Forum
schreibe nie new String(), leicht zu merken, praktisch immer verdächtig,
new String() siehst du nirgendwo in Code von anderen, wo hast du das her?,
in String-Variablen maximal z.B. Leerstring „“ einfügen,
aber hier würde auch, wenn es ginge, in der Zeile danach ein String in das Array geschrieben werden, was vorher an gleicher Position drin war, ob null oder sonstiges, ist egal
ein split selbst zu programmieren ist zwar wie gesagt worden nicht ganz nötig bei fertiger Methode,
an sich aber ein edles Ansinnen was auch sehr wichtig für Übung, Programmierdenken wäre, wie es bei dir ja anscheinend noch hapert,
es wäre eine wertvolle Übung für dich, etwas in diese Richtung ohne String.spilt() (welches komplett fertiges Array liefert) zu schaffen,
nur was in dein Plan? was hattest du mit deiner Code-Idee vor?
eine Schleife bis i=4 (oder 5, < oder <= ±1…, ++ oder --…) ist schonmal insofern schlecht, als dass du selber als menschlicher Beteiligter aus dem String ablesen musst, dass es 5 Elemente sind, keine allgemeine Lösung für beliebige Strings,
aber selbst wenn keine allgemeine Lösung gesucht, sondern nur einmaliger Code für diesen einen Fall,
was ist dann dein Plan in der Schleife? was sollte 4x oder 5x test.split(„\;“); in jede Array-Position schreiben?
wieso sollte dieser Aufruf einen einzelner Teil des Strings liefern, hast du die Doku der split-Methode gelesen?,
wieso sollte bei gleichen Aufruf wiederholt alle verschiedenen Teile nacheinander kommen und nicht jedes Mal dasselbe?
forsch einem Computer Befehle zur Ausführung zu geben zeigt erfreulichen Mut, andererseits auch gefährlich, es ist Code welcher Raketen aller Art losschickt
in Java zu Hause nicht ganz so kritisch, lernt hoffentlich auch irgendwie mit der Zeit, aber bisschen mehr Planung und Sinn bei der ganzen Sache wäre noch erfreulicher
welchen Plan hast du selber, kannst du das mit Worten beschreiben?
man kann nicht wild Konstrukte ‚irgendwie mit split-Methode‘ machen und hoffen dass das Richtige rauskommt…
idealerweise erst Plan und Überlegung, und sei es etwas kompliziertes a la „im i-ten Schleifendurchlauf einen komplizierten Substring vom i-ten bis i+1-ten Semikolon im Ursprungsstring herausschneiden“,
nicht unbedingt ideal, aber zumindest eine Möglichkeit, die man angehen könnte, und später besseres
wenn doch mal in dieser Richtung, durchaus häufig vorkommend, nur aktuell ganz unnötig,
also wenn zu befüllen, dann wäre die günstige Variante:
array** = „“;
kurz und schmerzlos
new String(); und new String(„“); gehen auch, genauso wie
new String(new String(new String(new String(new String()))));
funktioniert oder Aufruf einer Untermethode die 10 sec braucht,
schlimm sicherlich nicht, aber unnötig,
und gerade bei den Grundklassen wie String lohnt sich ein wenig auch auf Kleinigkeiten zu achten,
‚new String‘ ist etwas was in praktisch keinem Code etwas verloren hat (außer bei Spezialstellen wie Einlesen mit speziellen Codesatz oder Umwandlung byte in String),
irritiert in normalen Code jeden Leser, zu vermeiden
int x = 0;
ist auch besser als
int x = new Integer(0).intValue();
Na ja, du befüllst sie damit schon, und zwar mit dem Leerstring. Anfänglich steht null drin (*), und solange du sicherstellst, dass mit diesem null kein Unsinn getrieben wird, bis du es durch einen „richtigen“ Wert ersetzt, ist das auch kein Problem.
(*) Zumindest bei Objekt-Arrays. Für primitive Zahlentypen ist das Array inital mit 0 bzw. 0.0 gefüllt, bei boolean[] mit false und bei char[] mit '\0'.
Ich gehe davon aus, dass du hier bei jedem Semikolon splitten willst.
Aber du splittest bei jedem „\;“ Davon gibt es in deinem String bestimmt keine, daher ist das resultierende Array 0 und beim Zugriff auf 1 bekommst du diese Excpeption.