while schleife wird nicht verlassen

S

SpecialFighter108

App-Anbieter (In-App)
4
hallo zusammen,

ich habe folgenden code:

Javascript:
 Log.e("-->",DataString);
    ArrayList<String> ACList = new ArrayList<>();
    String[] ACString = DataString.split("\\|");

    Log.e("-->", "AC LENGTH: "+ACString.length);

    int x = 0;
    while (x < ACString.length) {
       String[] DataSplit = ACString[x].split(";");

       if (!ACList.contains(DataSplit[1])) {
           ACList.add(x,DataSplit[1]);
       }
       x++;
   }
   Log.e("-->", "===================");

Das ist mein Logcat:

Code:
01-1219:58:47.406 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka
01-1219:58:47.406 E: AC LENGTH:4
01-1219:58:47.406 E:===================
01-1220:02:18.952 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka|Eier3;Rewew4
01-1220:02:18.952 E: AC LENGTH:5
01-1220:03:26.124 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka|Eier3;Rewew4
01-1220:03:26.124 E: AC LENGTH:5
01-1220:04:00.961 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka|Eierlauf;Rewew
01-1220:04:00.961 E: AC LÄNGE:5
01-1220:04:31.444 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka
01-1220:04:31.444 E: AC LENGTH:4
01-1220:04:31.444 E:===================
01-1220:06:27.367 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka|Hhgu;ZgGHhh
01-1220:06:27.367 E: AC LENGTH:5

Sobald die AC Lenght größer als 5 ist (habe es auch schon testweise mit 12) probiert, wird mir die Logcat Ausgabe "===================" nicht angezeigt. ist der Wert kleiner 5 ist alles wieder in Ordnung.
Ich werd noch verrückt. habt ihr ne Idee?
 
Zuletzt bearbeitet:
Hast du da noch Code drumherum (z.B. ein try / catch-Block)?

Mein Verständnis-Problem: Du splittest auf "-", aber dieses Zeichen ist in deinem Input (aus dem Logcat) gar nicht drin, wodurch der Zugriff auf DataSplit[1] mit einer Exception abbrechen müsste.


EDIT: Wäre nicht erst ein Split nach '|' und dann nach ';' sinnvoller?

Momentan bekommst du ja
Pute
Rewe|Eier
Edeka|Pute
...

Willst du nicht eher das hier?
Pute;Rewe
Eier;Edeka
...
 
sry, mein Fehler in Post 1. Habe es korrigiert.
 
weil es mit ner while schleife doch auch gehen müsste, oder nicht?
habe es jetzt auch testweise mit einer for schleife probiert - selbes Problem

Hast du da noch Code drumherum (z.B. ein try / catch-Block)?
Nein, habe ich nicht.


UPDATE
Habe es jetzt mit try and Catch probiert. (hoffe so richtig):

Code:
Log.e("-->",DataString);
    ArrayList<String> ACList =new ArrayList<>();
   String[] ACString = DataString.split("\\|");

    Log.e("-->","AC LENGTH: "+ACString.length);

  
for ( int x = 0; x < ACProducts.length; x++ ) {
Log.e("-->", ""+x);
try {
       String[] DataSplit = ACString[x].split(";");

       if(!ACList.contains(DataSplit[1])){
           ACList.add(x,DataSplit[1]);
       }
       x++;
   }
} catch (Exception e) {
    Log.e("-->", "CATCH");
}



Output:
01-13 07:53:03.650 E: Pute;Rewe|Eier;Edeka|Pute;Rewe|Eier;Edeka|Hhgu;Zg G Hhh
01-13 07:53:03.650 E: AC LÄNGE: 5
01-13 07:53:03.650 E: 0
01-13 07:53:03.650 E: 1
01-13 07:53:03.650 E: 2
01-13 07:53:03.650 E: 3
01-13 07:53:03.650 E: 4
01-13 07:53:03.650 E: CATCH
01-13 07:53:03.650 E: ===================


Seit dem klappt das Script jetzt auch ohne Problem.
Aber warum kommt es überhaupt zu der Ausgabe "Catch"?
 
Zuletzt bearbeitet:
Warum nutzt du nicht "ACList.add(DataSplit[1])", sondern übergibst noch den Index x?

Ich vermute, du versuchst etwas an einem Index einzufügen, der nicht existiert (weil weniger Elemente in deiner Liste sind, als x angibt), was du aber uns schön verheimlichst, da du die Exception (die äußerst hilfreich gewesen wäre) selbst nicht loggst.
 
hätte ich bestimmt gemacht, wenn ich gewusst hätte wie ^^
bin noch neu in der Szene.
Aber durch das entfernen des Index, funktioniert der part wunderbar ohne CATCH Ausgabe.
Ich dachte, ich muss immer den Index mit angeben.

Vielen Dank :)
 
Versuch es so: Log.e("-->", "CATCH: "+e.getMessage()); im Catch-Block.
 
SpecialFighter108 schrieb:
weil es mit ner while schleife doch auch gehen müsste, oder nicht?

Ja, aber warum kompliziert, wenn es auf einfach geht. :)


Code:
ArrayList<String> acList =new ArrayList<>();
String[] acString = dataString.split("\\|");

for ( String aString : acString ) {

    String firstString = aString.split(";")[0];

    if(!acList.contains(firstString)
        acList.add(firstString);    
}
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
10
Aufrufe
235
swa00
swa00
SaniMatthias
Antworten
19
Aufrufe
974
swa00
swa00
O
Antworten
15
Aufrufe
2.980
ORHUX
O
Zurück
Oben Unten