String.substring în Java

Returnează o bucată din șir: de la beginIndex (inclusiv) până la endIndex (exclusiv) sau până la final.

Sintaxă
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
CharSequence subSequence(int beginIndex, int endIndex)   // Java 1.4

Ce face String.substring

substring(început, sfârșit) returnează caracterele de la indicele început inclusiv până la sfârșit exclusiv. Lungimea rezultatului este sfârșit - început. Cu un singur argument, returnează tot de la început până la final.

Dacă indicii sunt negativi, mai mari decât lungimea sau început > sfârșit, se aruncă StringIndexOutOfBoundsException. substring(i, i) dă șirul gol.

subSequence face exact același lucru, dar tipul returnat este CharSequence; există pentru că String implementează interfața CharSequence. În cod obișnuit folosești substring.

Parametri

Parametru Descriere
beginIndex Primul indice inclus (0 = începutul).
endIndex Primul indice care NU mai este inclus; cel mult length().

Ce returnează

Un String nou (respectiv CharSequence la subSequence).

Exemple

Exemplul 1: Bucăți dintr-un CNP

Indicii: cifra de sex la 0, anul la 1-2, luna la 3-4, ziua la 5-6.

public class Main {
    public static void main(String[] args) {
        String cnp = "2990415221234";
        String sex = cnp.substring(0, 1);
        String an = cnp.substring(1, 3);
        String luna = cnp.substring(3, 5);
        String zi = cnp.substring(5, 7);
        System.out.println("sex: " + sex + ", născută la " + zi + "." + luna + ".19" + an);
        System.out.println("restul: " + cnp.substring(7));
    }
}

Rezultat

sex: 2, născută la 15.04.1999
restul: 221234

Exemplul 2: Scurtarea unui titlu lung

public class Main {
    static String scurteaza(String text, int max) {
        if (text.length() <= max) {
            return text;
        }
        return text.substring(0, max - 3) + "...";
    }

    public static void main(String[] args) {
        System.out.println(scurteaza("Cum să înveți Java în 30 de zile", 20));
        System.out.println(scurteaza("Java pe scurt", 20));
        CharSequence cs = "Brașov".subSequence(0, 4);
        System.out.println(cs);
    }
}

Rezultat

Cum să înveți Jav...
Java pe scurt
Braș

Exemplul 3: Indici greșiți

public class Main {
    public static void main(String[] args) {
        String oras = "Iași";
        System.out.println("[" + oras.substring(4) + "]");
        System.out.println("[" + oras.substring(2, 2) + "]");
        try {
            System.out.println(oras.substring(2, 6));
        } catch (StringIndexOutOfBoundsException e) {
            System.out.println("Eroare: " + e.getMessage());
        }
    }
}

Rezultat

[]
[]
Eroare: Range [2, 6) out of bounds for length 4

Greșeli frecvente

  • Crezi că al doilea argument este lungimea, ca în alte limbaje. În Java este indicele de sfârșit: substring(2, 5) dă 3 caractere.
  • Tai un text mai scurt decât crezi: s.substring(0, 10) aruncă excepție dacă s are sub 10 caractere. Folosește Math.min(10, s.length()).

Comenzi înrudite

  • String.indexOf: Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unui text sau caracter, ori -1.
  • String.charAt: Returnează caracterul (char) de la poziția dată; prima poziție este 0, ultima este length() – 1.
  • String.codePointAt: Lucrează cu puncte de cod Unicode întregi (inclusiv emoji), nu cu valori char: citire, numărare, deplasare.
  • String.split: Împarte șirul în bucăți după un separator (expresie regulată) și returnează un array de String.