String.indexOf în Dart

Returnează poziția primei (indexOf) sau ultimei (lastIndexOf) apariții a unui text, sau -1 dacă lipsește.

Sintaxă
int indexOf(Pattern pattern, [int start = 0])
int lastIndexOf(Pattern pattern, [int? start])

Ce face String.indexOf

indexOf(x) caută x de la stânga la dreapta și returnează poziția la care începe prima apariție. lastIndexOf(x) caută de la dreapta la stânga și returnează poziția ultimei apariții. Dacă textul nu este găsit, ambele returnează -1.

Al doilea parametru spune de unde începe căutarea. La indexOf căutarea merge înainte de la start, iar la lastIndexOf merge înapoi de la start. Așa poți găsi toate aparițiile, într-o buclă.

Rezultatul se folosește des cu substring: de exemplu, extensia unui fișier este tot ce urmează după ultimul punct.

Parametri

Parametru Descriere
pattern Textul sau RegExp căutat.
start Poziția de la care începe căutarea.

Ce returnează

Un int: poziția sau -1.

Exemple

Exemplul 1: Prima și ultima apariție

void main() {
  var text = 'Ana are mere, Ana are pere';
  print(text.indexOf('Ana'));
  print(text.lastIndexOf('Ana'));
  print(text.indexOf('are', 5));
  print(text.indexOf('prune'));
  print(text.indexOf(RegExp(r'[,.]')));
}

Rezultat

0
14
18
-1
12

Exemplul 2: Numele și extensia unui fișier

void main() {
  for (var f in ['raport.final.pdf', 'poza.jpg', 'README']) {
    var punct = f.lastIndexOf('.');
    if (punct == -1) {
      print('$f: fără extensie');
    } else {
      print('$f: nume "${f.substring(0, punct)}", extensie "${f.substring(punct + 1)}"');
    }
  }
}

Rezultat

raport.final.pdf: nume "raport.final", extensie "pdf"
poza.jpg: nume "poza", extensie "jpg"
README: fără extensie

Exemplul 3: Toate aparițiile unui cuvânt

void main() {
  var text = 'la Iași, de la Iași, spre Iași';
  var pozitii = <int>[];
  var i = text.indexOf('Iași');
  while (i != -1) {
    pozitii.add(i);
    i = text.indexOf('Iași', i + 1);
  }
  print(pozitii);
}

Rezultat

[3, 15, 26]

Greșeli frecvente

  • Verifici if (text.indexOf(x) > 0). Pierzi cazul în care x este chiar la început (poziția 0). Compară cu != -1 sau folosește contains.

Comenzi înrudite

  • String.contains: Verifică dacă textul conține o bucată (contains), începe cu ea (startsWith) sau se termină cu ea (endsWith).
  • String.substring: substring extrage o bucată din text între două poziții; operatorul [] dă caracterul de la o poziție.
  • RegExp.firstMatch: Caută prima potrivire a modelului în text și o returnează cu poziții și grupuri, sau null dacă nu există.