2010-04-21 6 views
30

Ich bin gespannt, warum die String.indexOf eine 0 (statt -1) zurückgibt, wenn Sie nach dem Index einer leeren Zeichenfolge in einer Zeichenfolge fragen.Java String.indexOf und leere Strings

Die Javadocs sagen nur, dass diese Methode den Index in dieser Zeichenfolge der angegebenen Zeichenfolge zurückgibt, -1, wenn die Zeichenfolge nicht gefunden wird.

Für mich scheint dieses Verhalten höchst unerwartet, ich hätte eine -1 erwartet. Irgendwelche Ideen, warum dieses unerwartete Verhalten vor sich geht? Ich würde zumindest denke, das wert ist eine Notiz in der Javadocs Methode ...

System.out.println("FOO".indexOf("")); // outputs 0 wtf!!! 
System.out.println("FOO".indexOf("bar")); // outputs -1 as expected 
System.out.println("FOO".indexOf("F")); // outputs 0 as expected 
System.out.println("".indexOf("")); // outputs 0 as expected, I think 
+1

Ja, und was ist die Frage? –

+1

'" foo ".indexOf (" ")' gibt 0 zurück und '" foo ".substring (0.0)' gibt '" "zurück. Scheint konsistent, würde ich sagen. –

+0

mögliches Duplikat von http://StackOverflow.com/Questions/2568625/indexof-method-returns-0-when-it-should-had-return-1-in-c-java –

Antwort

89

Die leere Zeichenfolge ist überall und nirgends. Es ist immer in allen Fäden und durchdringt die Essenz ihres Seins, doch während du es suchst, wirst du nie einen Blick darauf erhaschen.

Wie viele leere Zeichenfolgen können Sie am Anfang einer Zeichenfolge einfügen? Mu

Der Schüler sagte dem Lehrer,

Lehrer, ich glaube, dass ich die Art der leeren Zeichenfolge gefunden haben. Die leere Schnur ist wie ein Staubkorn, und sie schwebt frei durch eine Schnur, während Staub frei durch den Raum gleitet und in einem Sonnenstrahl glitzert.

Der Lehrer reagierte auf die Schüler,

Hmm. Eine schöne Vorstellung. Jetzt sag mir, wo ist der Staub und wo ist das Sonnenlicht?

Der Lehrer schlug den Schüler mit einem Gurt und wies ihn an, seine Meditation fortzusetzen.

+3

Wir brauchen ernsthaft mehr Benutzer wie Sie auf SO. Ich habe eine Ihrer Antworten in einem verwandten Beitrag gelesen und bin in den letzten 10 Minuten von anderen Antworten in Ihrem Profil aufgestanden. Gut gemacht, Zen-Meister. – JWiley

+0

Aber wie zählt man die Anzahl der Engel, die in der leeren Schnur tanzen können? –

+0

Ich liebe das. Ich werde niemals eine Antwort wie diese vergessen. – racl101

24

Nun, wenn es hilft, Sie von "FOO" als "" + "FOO" denken kann.

+4

In der Tat kann die leere Zeichenfolge zwischen zwei benachbarten Zeichen in einer Zeichenfolge sowie am Anfang und Ende gefunden werden. Die erste solche Instanz ist der Anfang der Zeichenfolge, nämlich die Position 0. – Joey

+0

Wie oft kommt die leere Zeichenfolge in "FOO" vor? – Armand

+0

@Ali: ∞ + 1, würde ich sagen. – Joey

0

Mit dem Ausdruck "" beziehen Sie sich tatsächlich auf eine leere Zeichenfolge. Eine Null-Zeichenfolge ist ein ätherisches Tag, das auf etwas platziert wird, das nur existiert, um zu zeigen, dass an dieser Stelle irgendetwas fehlt.

Also, mit den Worten "" .indexOf (""), Sie fragen, wirklich den Dolmetscher:

Wo kommt ein String-Wert von null in meinem Null-String existieren?

Sie gibt eine Null zurück, da der Nullwert am Anfang der nicht vorhandenen Nullzeichenfolge steht.

Wenn Sie der Zeichenfolge etwas hinzufügen möchten, wird sie nun zu einer Nicht-Null-Zeichenfolge ... null kann als Abwesenheit von allem, auch gar nichts, betrachtet werden.

+0

Was ist der Unterschied zwischen einer "null string" und "null"? Sagen wir nicht "leere Zeichenfolge" statt "Null-Zeichenfolge", um eine Verwechslung mit "null" zu vermeiden? – nnnnnn

+0

Schauen Sie sich diese Erklärung an: http://StackOverflow.com/Questions/4802015/Difference-between-Null-and-Java-String – exoboy

0

Mit einem algebraischen Ansatz ist "" das neutrale Element der Stringverkettung: x + "" == x und "" + x == x (obwohl + hier nicht kommutativ ist).

Dann muss es auch sein:

x.indexOf (y) == i and i != -1 
<==> x.substring (0, i) + y + x.substring (i + y.length()) == x 

wenn y "=" gilt dies, wenn i == 0 und x.substring (0, 0) == "". Ich habe Java nicht entworfen, aber ich nehme an, dass Mathematiker daran teilgenommen haben ...

1

int number_of_empty_strings_in_string_named_text = text.length() + 1

Alle Zeichen werden durch einen leeren String getrennt. Zusätzlich ist am Anfang und Ende leer String vorhanden.

+0

Jetzt sehe ich, dass die gleiche Beschreibung in Joey's Kommentar ist, aber immer noch denke ich, dass es eine gute Idee ist um dies in eine neue Antwort zu bringen, denn das ist die einzige Antwort, die wirklich erklärt, wie es funktioniert. @Joey, wenn du diese Antwort als deine eigene und meine löschen willst, lass es mich wissen, weil du das erste Mal damit warst. – ctomek