String split Methode

Kritiki

Mitglied
Hallo miteinander,

habe folgendes komisches Problem

Java:
	public String reverseDate(String reverse) {
		
		String reverseResult;
		String []temp = reverse.split("\\.");
		
		reverseResult = temp[1];

		return reverseResult;
	}

temp[1] ist nur ein Test-Wert damit ich überprüfen kann ob das Richtige Ergebnis ausgegeben wird,
komischer weise kriege ich hier eine ArrayOutOfBoundException, in der variable Reverse steht ein String mit "." getrennt und ich möchte jetzt splitten mit dem Regex "\\." sodass ich daraus 3 Werte bekomme, zb. ein Datum

Wenn ich debugge und in der Laufzeit in das Array schaue sehe ich schön den String aufgesplittet in dem Array aber ich kann die Werte nicht ausgeben, ausser!! den [0] Wert, den bekomme ich, alle anderen lösen die Exception aus.

Kann man mir jemand das Phänomen erklären oder bin ich nur einfach zu Oberflächlich und sehe die einfache Lösung nicht.

Besten Dank im voraus
 
Du hast alles richtig gemacht. Habe es gerade überprüft:
Java:
    String testStr = "22.01.2012";

    String[] temp = testStr.split("\\.");

    System.out.println(Arrays.toString(temp));
Wen split nur einen ein-Elementigen Array liefert, hat es den Splitstring nicht gefunden. Dass Du glaubst, im Debugger einen mehrelementigen Array gesehen zu haben, würde ich für eine Fehlinterpretation Deinerseits halten.
 
Hi,

also das Verständnis ist da 😉,

nur besteht jetzt noch die Frage ob ich trotzdem irgendwie die Inhalte einzeln ansprechen kann?

Aber ich glaube ich muss mich nach ner Alternativen umsehen.

Gruss
 
In dem von mir geposteten Code könntest Du durchaus temp[1] machen.

Was immer Du in Deinem Code machst, entweder der Split klappt und Du siehst im Debugger tatsächlich einen Array mit mehreren Elementen, dann greifst Du aber danach auf einen anderen Array zu oder Du fehlinterpretierst die Ausgabe des Debuggers und der Array hat nur ein Element. Dass Du in einem Array mit mehreren Elementen bei Zugriff auf [1] eine ArrayOutOfBoundException bekommst, ist schlicht ausgeschlossen.
 
Zuletzt bearbeitet von einem Moderator:
hab mal nen bild vom debug angehängt,

ich Schliesse nicht aus das ich was falsch interpretiere, ist nur zur Überprüfung ob ich falsch liege oder nicht.

aber schonmal danke.
 

Anhänge

  • debug.JPG
    debug.JPG
    26,1 KB · Aufrufe: 36
was soll dein Screenshot sagen?
dort ist reverse.split(".") zu sehen, hast du das im Debugger irgendwo als Auswertung unabhängig vom Code eingetippt?

reverse.split(".") liefert nur ein Array der Länge 1, alle Indexe außer 0 führen zur Exception

reverse.split("\\.") liefert dagegen ein Array der Länge 3, alle Indexe von 0 bis 2 funktionieren

im Screenshot ist ja auch zu sehen, dass Array temp die Länge 3 hat

-----

du kannst auch testweise auf das gefährliche Sonderzeichen . verzichten und (nur zum Test) mit # als Trennzeichen arbeiten,
dann gehts bestimmt auch im Debugger, was immer du da machst

------

für ein Forum wäre es erfreulich wenn du auf Debugger mit nicht nachvollziehbaren Einstellungen und ähnliche Späße verzichtest,
es zählt allein Java-Code und darin System.out.println()-Ausgaben, das kann jeder kopieren, nachvollziehen, läuft normalerweise überall gleich ab
 
Zuletzt bearbeitet von einem Moderator:
es geht um das Array Temp, das es 3 werte hat die ich aber nicht einzeln ansprechend kann.
ich wollte das zur überprüfung anbringen weil nillehammer von einer fehlinterpretation des dimensionalen arrays gesprochen hat

das reverse.split hat keine bedeutung hier
 
nillehammer hat in Posting #2 Code gepostet, der in nahezu allen Fällen (*) funktionieren
bzw. in dem auch ein Zugriff temp[2] keine Exception werfen wird,

(*) Ausnahme ist vielleicht Grenzbereich im Arbeitsspeicher/ Stack/ stop() auf Thread aufgerufen usw.

--------

insofern ist keine echte Frage ersichtlich, split() funktioniert, das Array ist je nach Eingabe passend groß, Zugriffe dann möglich,
was immer bei dir vielleicht nicht geht hast du noch nicht besonders ausführlich beschrieben,

und nochmal: ideal sind immer vollständige Programm, ohne offene unbekannte Eingabe-Parameter an Methoden,
ohne Benutzereingaben, Lesen aus Dateien, Math.random() usw.,

kopieren, laufen lassen, Fehler auch bei anderen, oder meist Problem unbekannt
 
Java:
for(count=0;count<(features.length-1)&&!choice.equals("");count++) 
       {    
        System.out.println("Please enter a feature (name=description) or hit enter to return");
        choice=Input.readString();
        String[] split=choice.split("=");
        Feature feat=new Feature(split[0],split[1]);
        features[count]=feat;
             }

Fehlermeldung: ArrayIndexOutOfBoundsException: 1

Irgendwie passt ihm split[1] nicht, aber warum nicht?
 
das split sollte funktionieren aber was eingegeben wird ist hier nicht zu erkennen, gibt doch choice aus,
vielleicht liest readString() nur bis zum =, möchte ich selber zunächst nicht testen

wenn man nur Enter klickt muss der Programmablauf dort übrigens auch vorbei..
 
das split sollte funktionieren aber was eingegeben wird ist hier nicht zu erkennen, gibt doch choice aus,
vielleicht liest readString() nur bis zum =, möchte ich selber zunächst nicht testen

wenn man nur Enter klickt muss der Code dort übrigens auch vorbei..

wenn ich choice ausgebe, dann wird das eingegebene ausgegeben...

wenn man, bevor man etwas eingibt, enter klickt, dann kommt die fehlermeldung genauso
 
wenn ich etwas ohne dem "=" eingebe, dann kommt auch eine fehlermeldung, obwohl er bei split[0] das was ich eingegeben habe ausgibt, und bei split[1] gibt er genaus das selbe aus..

choice: ee

split[0]= ee
split[1]= ee

Fehlermeldung..
 
tja, wie stellst du dir denn den Ablauf nach einem Enter vor?
überspringe z.B. den Rest mit einem if,

für den Fall dass jemand 'hallo' eintippt sollte dein Programm besser auch nicht mit Exception reagieren
 
tja, wie stellst du dir denn den Ablauf nach einem Enter vor?
überspringe z.B. den Rest mit einem if,

für den Fall dass jemand 'hallo' eintippt sollte dein Programm besser auch nicht mit Exception reagieren

Jep, es geht...🙂

Wie kann ich das verhindern dass er nicht mit Exception reagiert?
 
Zuletzt bearbeitet:
Hi,

versuche es mal damit.

Java:
public String reverseDate(String reverse) 
{
        String reverseResult;
        String []temp = reverse.split("[\\.]");
        
        reverseResult = temp[1];
 
        return reverseResult;
    }
 

Neue Themen


Zurück
Oben