String.substring în Dart

substring extrage o bucată din text între două poziții; operatorul [] dă caracterul de la o poziție.

Sintaxă
String substring(int start, [int? end])
String operator [](int index)

Ce face String.substring

Pozițiile dintr-un text încep de la 0. text.substring(start, end) returnează textul de la poziția start (inclusiv) până la end (exclusiv): 'Timișoara'.substring(0, 4) este 'Timi'. Fără end, merge până la final.

Operatorul [] returnează caracterul de la o poziție, ca text de lungime 1: 'Iași'[0] este 'I'. Ultimul caracter este text[text.length - 1]. Dart nu are indici negativi.

Dacă pozițiile sunt în afara textului sau start > end, se aruncă RangeError. Ca la length, pozițiile sunt unități UTF-16: nu tăia un emoji la jumătate.

Parametri

Parametru Descriere
start Poziția de început (inclusiv).
end Poziția de sfârșit (exclusiv); implicit lungimea textului.
index La []: poziția caracterului, de la 0 la length - 1.

Ce returnează

Un String nou.

Exemple

Exemplul 1: Bucăți și caractere

void main() {
  var oras = 'Timișoara';
  print(oras.substring(0, 4));
  print(oras.substring(4));
  print(oras.substring(2, 5));
  print(oras[0]);
  print(oras[oras.length - 1]);
}

Rezultat

Timi
șoara
miș
T
a

Exemplul 2: Inițiale și CNP

Din CNP, prima cifră indică sexul și secolul, iar următoarele șase cifre sunt data nașterii (AALLZZ).

void main() {
  var nume = 'Ana Maria Popescu';
  var initiale = nume.split(' ').map((p) => p[0]).join();
  print(initiale);

  var cnp = '6040315223344';
  var an = cnp.substring(1, 3);
  var luna = cnp.substring(3, 5);
  var zi = cnp.substring(5, 7);
  print('Născută la $zi.$luna.20$an');
}

Rezultat

AMP
Născută la 15.03.2004

Exemplul 3: Poziție greșită

Prindem eroarea ca să vedem mesajul; într-un program real verifici lungimea înainte.

void main() {
  var cod = 'RO12';
  try {
    print(cod.substring(2, 10));
  } on RangeError catch (e) {
    print('Eroare: ${e.message}, valoarea ${e.invalidValue}');
  }
  print(cod.substring(2, cod.length < 10 ? cod.length : 10));
}

Rezultat

Eroare: Invalid value, valoarea 10
12

Greșeli frecvente

  • Crezi că al doilea argument este lungimea bucății. Este poziția de sfârșit: substring(2, 5) dă 3 caractere.
  • Scrii text[-1] pentru ultimul caracter, ca în Python. Aruncă RangeError; folosește text[text.length - 1].
  • Încerci să schimbi o literă cu text[0] = 'A'. Textele sunt imutabile: construiește un text nou.

Comenzi înrudite

  • String.indexOf: Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unui text, sau -1 dacă lipsește.
  • String.length: length dă numărul de unități UTF-16 ale textului; isEmpty și isNotEmpty spun dacă textul este gol.
  • String.replaceRange: Înlocuiește bucata dintre două poziții cu alt text, fără să caute nimic.