2010-04-21 19 views
30

Tengo curiosidad por qué String.indexOf está devolviendo un 0 (en lugar de -1) cuando se solicita el índice de una cadena vacía dentro de una cadena.Java String.indexOf y cadenas vacías

Los Javadocs solo dicen que este método devuelve el índice en esta cadena de la cadena especificada, -1 si no se encuentra la cadena.

Para mí este comportamiento parece muy inesperado, hubiera esperado un -1. ¿Alguna idea de por qué está ocurriendo este comportamiento inesperado? Yo por lo menos creo que esto vale la pena una nota en Javadocs del método ...

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

Sí, y ¿cuál es la pregunta? –

+1

'" foo ".indexOf (" ")' devuelve 0 y '" foo ".substring (0.0)' returns '" "'. Parece consistente, diría yo. –

+0

posible duplicado de http://stackoverflow.com/questions/2568625/indexof-method-returns-0-when-it-should-had-return-1-inc-c-java –

Respuesta

89

La cadena vacía está en todas partes, y en ninguna parte. Está dentro de todos los hilos en todo momento, impregnando la esencia de su ser, sin embargo, a medida que lo busca nunca podrá echar un vistazo.

¿Cuántas cadenas vacías puede caber al comienzo de una cadena? Mu

El estudiante dijo a la maestra,

Maestro, creo que he encontrado la naturaleza de la cadena vacía. La cuerda vacía es como una partícula de polvo, y flota libremente a través de una cuerda mientras el polvo flota libremente a través de la habitación, brillando en un rayo de sol.

El maestro respondió al estudiante,

Hmm. Una buena idea. Ahora dime, ¿dónde está el polvo y dónde está la luz del sol?

El maestro golpeó al estudiante con una correa y le indicó que continuara su meditación.

+3

Necesitamos seriamente más usuarios como usted en SO. Leí una de sus respuestas en una publicación relacionada, y he estado recuperando los últimos 10 millones de otras respuestas en su perfil. Bien hecho, Maestro Zen. – JWiley

+0

¿Pero cómo se cuenta el número de ángeles que pueden bailar dentro de la cuerda vacía? –

+0

Me encanta esto. Nunca olvidaré una respuesta como esta. – racl101

24

Bueno, si ayuda, se puede pensar en como "FOO""" + "FOO".

+4

De hecho, la cadena vacía se puede encontrar entre dos caracteres adyacentes en una cadena, así como al principio y al final. La primera instancia es el mismo comienzo de la cadena, es decir, la posición 0. – Joey

+0

¿Cuántas veces ocurre la cadena vacía en "FOO"? – Armand

+0

@ Ali: ∞ + 1, yo diría. – Joey

0

Al usar la expresión "", en realidad se está refiriendo a una cadena nula. Una cadena nula es una etiqueta etérea colocada sobre algo que existe solo para mostrar que no hay nada en esta ubicación.

Así, al decir "" .indexOf (""), que están realmente preguntando al intérprete:

¿Dónde existe un valor de cadena de null en mi cadena nula?

Devuelve un cero, ya que el nulo está al principio de la cadena nula inexistente.

Añadir algo a la cadena ahora la convertiría en una cadena no nula ... null puede considerarse como la ausencia de todo, incluso de nada.

+0

Entonces, ¿cuál es la diferencia entre una "cadena nula" y "nula"? ¿No decimos "cadena vacía" en lugar de "cadena nula" específicamente para evitar confusiones con 'null'? – nnnnnn

+0

Echa un vistazo a esta explicación: http://stackoverflow.com/questions/4802015/difference-between-null-and-java-string – exoboy

0

Usando un enfoque algebraico, "" es el elemento neutral de la concatenación de cadenas: x + "" == xy "" + x == x (aunque + no es conmutativo aquí).

entonces también debe ser:

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

cuando y = "", esto es si i == 0 y x.substring (0, 0) == "". No diseñé Java, pero supongo que los matemáticos participaron en él ...

1

int number_of_empty_strings_in_string_named_text = text.length() + 1

Todos los caracteres están separados por un vacío String. Además, String vacío está presente al principio y al final.

+0

Ahora veo que la misma descripción está en el comentario de Joey, pero aún así creo que es una buena idea para poner esto en una nueva respuesta, porque esa es la única respuesta que realmente explica cómo funciona. @Joey, si quieres poner esta respuesta como la tuya y eliminar la mía, házmelo saber porque fuiste el primero en hacerlo. – ctomek

Cuestiones relacionadas