Java: plage d'index de sous-chaîne

Code:

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

Sortie: ers

Je ne comprends pas vraiment comment fonctionne la méthode substring. L'index commence à 0? Si je commence par 0, e est à l'index 4 mais char i est à 7 donc la sortie serait ersi.

61
demandé sur Peter Mortensen 2010-12-31 15:15:19

10 réponses

0: U

1: n

2: i

3: v

4: e

5: r

6: s

7: i

8: t

9: y

L'index de départ est inclus

L'index final est exclusif

Javadoc lien

120
répondu Axel Fontaine 2015-06-15 06:42:22

Les deux sont basés sur 0, mais le début est inclusif et la fin est exclusive. Cela garantit que la chaîne résultante est de longueur start - end. Pensez-y comme des positions dans la chaîne plutôt que des caractères réels.

0 1 2 3 4 5 6 7 8 9
 u n i V E R s i t y
      s       e
      t       n
      a       d
      r
      t

Citant les documents :

La sous-chaîne commence au niveau spécifié beginIndex et s'étend à la caractère à l'index endIndex - 1. Ainsi la longueur de la sous-chaîne est endIndex-beginIndex.

10
répondu marcog 2010-12-31 12:41:40

Voir le javadoc . C'est un index inclusif pour le premier argument et exclusif pour le second.

10
répondu Matt 2018-02-08 20:24:26

Comme toi, je n'ai pas trouvé que ça venait naturellement. Normalement, je dois encore me rappeler que

  • La Longueur de la chaîne renvoyée est

    LastIndex-firstIndex

  • Que vous pouvez utiliser la longueur de la chaîne comme lastIndex même s'il n'y a pas de caractère là-bas et essayer de le référencer lancerait une Exception

Donc

"University".substring(6, 10)

Renvoie la chaîne de 4 caractères " sity" même s'il n'y a pas de caractère à la position de 10.

5
répondu peter.murray.rust 2010-12-31 12:44:19

Oui, l'index commence à zéro (0). Les deux arguments sont startIndex et endIndex, où selon la documentation:

La sous-chaîne commence à l'index beginindex spécifié et s'étend au caractère de l'index endIndex-1.

Voir ici pour plus d'informations.

2
répondu Richard H 2018-02-08 20:25:02
public String substring(int beginIndex, int endIndex)

beginIndex-l'index de début, inclusivement.

endIndex-l'index de fin, exclusif.

Exemple:

public class Test {

    public static void main(String args[]) {
        String Str = new String("Hello World");

        System.out.println(Str.substring(3, 8));
    }
 }

Sortie: "lo Wo"

De 3 à 7 index.

Il y a aussi un autre type de méthode substring():

public String substring(int beginIndex)

beginIndex-l'index de début, inclusivement. Renvoie une sous-chaîne commençant par beginIndex jusqu'à la fin de la chaîne principale.

Exemple:

public class Test {

    public static void main(String args[]) {
        String Str = new String("Hello World");

        System.out.println(Str.substring(3));
    }
}

Sortie: "lo Monde"

De 3 au dernier index.

2
répondu Ratul Bin Tazul 2018-02-08 20:27:24

Pour la sous-chaîne (startIndex, endIndex), startIndex est inclusif et endIndex est exclusif. Le startIndex et endIndex sont très confus. Je comprendrais substring (startIndex, length) pour m'en souvenir.

1
répondu elliptic00 2013-08-05 18:34:02

La sous-chaîne commence à, et inclut le caractère à l'emplacement du premier nombre donné et va à, mais n'inclut pas le caractère au dernier nombre donné.

1
répondu Brett H 2018-02-08 20:25:57
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));
    }
}

Sortie:

length is: 31

Substring is: programming paradigm
1
répondu Prince Gera 2018-02-08 20:34:46

L'endIndex est un terme très déroutant. Je suppose que le motif était de garder la longueur de la nouvelle chaîne à endIndex - startIndex. Mais alors quoi? Je suppose qu'il était plus facile de se rappeler que les deux sont inclusifs, plutôt que de se souvenir que le début est inclusif et que la fin est exclusive.

0
répondu apadana 2018-02-08 20:26:20