Frage von Dranland, 60

Java - indexOf gibt -1 zurück?

Hier:

Arrays.asList("abcdefghijklmnopqrstuvwxyz".toCharArray()).indexOf('a');

Eigentlich müsste doch 0 rauskommen, weil in dem Array, das ich erzeuge, das a an 0ter Stelle ist.

Es kommt aber immer -1 raus...

Warum?

Antwort
von SureYouCan, 15

Ich weiß nicht genau was dein Ziel ist, allerdings ist es logisch das dort kein 0 raus kommt.

Dazu solltest du einfach mal den Debugger starten und schauen was für ein Konstrukt bei rumkommt.

Wenn du wirklich eine Liste aus den einzelnen Buchstaben haben willst, an der du dann indexOf verwenden kannst, musst du etwas mehr tun.

Hier ein kleines Beispiel mit Java 8 und Lambdas:

http://pastebin.com/AbQUbaXR

Solltest du aber wirklich nur den Index benötigen, solltest du es so wie Jonas711 machen und indexOf einfach an dem String direkt anwenden

Antwort
von Jonas711, 30

Ersetze Arrays.asList() durch Chars.asList()

Falls du aber wirklich nur die Position haben willst, kannst du genauso gut die indexOf-Methode gleich auf dem String ausführen.

Kommentar von Jonas711 ,

Edit: Hab ein bisschen gepennt. Die Klasse Chars gibt es bei mir nur, weil ich Guava importiert habe. Die jar dazu kannst du dir über Maven besorgen.

Ansonsten musst du die Befüllung der Liste selbst über eine Schleife realisieren.

Antwort
von Gehilfling, 50

Kann es gerade nicht nachprüfen, aber ich tippe darauf, dass in deinem Array jetzt an 0-ter Stelle "abcdefghijklmnopq..." steht und nicht lediglich "a".

Hab hier aber kein Eclipse installiert zum testen. Kannst aber testweise mal nicht "IndexOf('a')" suchen, sondern entsprechend "IndexOf('abcdef....')".

Kommentar von Dranland ,

Ne immer noch -1 :(

Antwort
von priesterlein, 37

Mache jeden Befehl einzeln, damit du mitbekommst, was da läuft.

Lass dein Array ausgeben und schau es dir an.

Lass deine Liste ausgeben und schau sie dir an.

Beachte, dass du keinen Index aus einem Array holst sondern aus einer List.

Antwort
von JCSupport, 45

So würde es gehen:

Arrays.asList("abcdefghijklmnopqrstuvwxyz".indexOf('b'));
Kommentar von Dranland ,

Ja da hol ich mir des aus nem string aber ich will ja das indize aus einem array haben.

Weißt du wie das geht?

Kommentar von JCSupport ,

Für soetwas empfehle ich dir das Nitrado-Forum. (board.nitrado,net). Dort gibt es viele viele Member die sich mit sowas echt gut auskennen!

Expertenantwort
von KnusperPudding, Community-Experte für Java, 10

Das Problem an der Sache ist, dass du eine primitive Array an die Methode:

Arrays.asList() übergibst. Denn das ist so nicht vorgesehen, denn die Methode nimmt Generic-Varargs entgegen. Übergibst du nun eine primitive Array wird diese in ein einziges Item Konvertiert was in etwa so aussieht:

[C@66d3c617

was dann natürlich auch kein 'a' enthällt, wodurch dein Index einen Wert von -1 hat.

Entsprechend ist hier der Ansatz von Jonas711 der einzig richtige, denn

Chars.asList() nimmt char-Varargs entgegen und gibt eine List mit Elementen der Klasse Character wieder. - Wovon du mit indexOf auf dein Gewünschtes Ergebnis  kommst.

Keine passende Antwort gefunden?

Fragen Sie die Community