Java: rango de índice de subcadena

Código:

public class Test { public static void main(String[] args) { String str = "University"; System.out.println(str.substring(4, 7)); } } 

Salida: ers

Realmente no entiendo cómo funciona el método de subcadena. ¿El índice comienza en 0? Si comienzo con 0, e está en el índice 4 pero char i está en 7, por lo que la salida sería ersi .

0: U

1: n

2: yo

3: v

4: e

5: r

6: s

7: i

8: t

9: y

El índice de inicio es inclusivo

El índice final es exclusivo

Enlace Javadoc

Ambos están basados ​​en 0, pero el inicio es inclusivo y el final es exclusivo. Esto garantiza que la cadena resultante sea de longitud de start - end . Piense en ellos como posiciones en la cuerda en lugar de personajes reales.

 0 1 2 3 4 5 6 7 8 9 uni VER sity se tn ad r t 

Citando los documentos :

La subcadena comienza en el beginIndex especificado y se extiende al carácter en el índice endIndex - 1 . Por lo tanto, la longitud de la subcadena es endIndex-beginIndex .

Ver el javadoc . Es un índice inclusivo para el primer argumento y exclusivo para el segundo.

Al igual que usted, no me pareció natural. Normalmente todavía tengo que recordarme a mí mismo que

  • la longitud de la cadena devuelta es

    lastIndex – firstIndex

  • que puedes usar la longitud de la cadena como el último índice, aunque no haya ningún personaje allí e intentar hacer referencia a él arrojaría una excepción

asi que

 "University".substring(6, 10) 

devuelve la “cadena” de cadena de 4 caracteres aunque no haya caracteres en la posición 10.

Sí, el índice comienza en cero (0). Los dos argumentos son startIndex y endIndex, donde por la documentación:

La subcadena comienza en el beginIndex especificado y se extiende al carácter en el índice endIndex – 1.

Mira aquí para más información.

 public String substring(int beginIndex, int endIndex) 

beginIndex – el índice de inicio, inclusive.

endIndex índice final, exclusivo.

Ejemplo:

 public class Test { public static void main(String args[]) { String Str = new String("Hello World"); System.out.println(Str.substring(3, 8)); } } 

Salida: “lo Wo”

De 3 a 7 índice.

También hay otro tipo de método substring() :

 public String substring(int beginIndex) 

beginIndex – el índice de inicio, inclusive. Devuelve una cadena secundaria que comienza desde beginIndex hasta el final de la cadena principal.

Ejemplo:

 public class Test { public static void main(String args[]) { String Str = new String("Hello World"); System.out.println(Str.substring(3)); } } 

Salida: “lo mundo”

Desde 3 hasta el último índice.

Para la subcadena (startIndex, endIndex), startIndex es inclusivo y endIndex son exclusivos. StartIndex y endIndex son muy confusos. Yo entendería la subcadena (startIndex, length) para recordar eso.

La subcadena comienza en, e incluye el personaje en la ubicación del primer número dado y va, pero no incluye el personaje en el último número dado.

 public class SubstringExample { public static void main(String[] args) { String str="OOPs is a programming paradigm..."; System.out.println(" Length is: " + str.length()); System.out.println(" Substring is: " + str.substring(10, 30)); } } 

Salida:

 length is: 31 Substring is: programming paradigm 

El endIndex es un término muy confuso. Supongo que el motivo fue mantener la longitud de la nueva cadena en endIndex – startIndex. ¿Y qué? Creo que fue más fácil recordar que ambos son inclusivos, en lugar de recordar que el inicio es inclusivo y el final es exclusivo.