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ăsare sub 10 caractere. FoloseșteMath.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.