String în Dart

Tipul pentru text în Dart: un șir de caractere care nu se mai poate modifica după creare.

Sintaxă
abstract final class String implements Comparable<String>, Pattern
String operator +(String other)
String operator *(int times)

Ce face String

Un String este un text: 'Ana', "Iași". Poți folosi ghilimele simple sau duble, iar pentru text pe mai multe rânduri trei ghilimele ('''...'''). Valorile se pun în text cu interpolare: 'Salut, $nume' sau 'Total: ${pret * 2} lei'. Un text cu r în față (r'C:\date') este „brut”: \ nu mai are sens special.

Textele sunt imutabile: metode ca toUpperCase sau trim nu schimbă textul original, ci returnează unul nou. Operatorul + lipește două texte ('Ana' + ' Pop'), iar * repetă un text de un număr de ori ('-' * 10).

Două texte se compară cu == după conținut. Pentru ordine alfabetică (simplă, după codurile caracterelor) folosește compareTo. Ca să construiești un text din multe bucăți, într-o buclă, folosește StringBuffer în loc de + repetat.

Parametri

Parametru Descriere
other La +: textul lipit la final.
times La *: de câte ori se repetă textul (0 sau mai mult).

Ce returnează

+ și * returnează un String nou.

Exemple

Exemplul 1: Crearea și lipirea textelor

Textele alăturate fără operator ('Bună ' 'ziua') se lipesc automat la compilare. Interpolarea este de obicei mai clară decât +.

void main() {
  var prenume = 'Ana';
  var nume = "Popescu";
  var complet = prenume + ' ' + nume;
  print(complet);
  print('Salut, $prenume! Ai ${prenume.length} litere în prenume.');
  print('Bună ' 'ziua');
  var adresa = '''Str. Lăpușneanu 12
Iași''';
  print(adresa);
  print(r'Fișierul este în C:\date\note.txt');
  print('Ana' == 'An' + 'a');
}

Rezultat

Ana Popescu
Salut, Ana! Ai 3 litere în prenume.
Bună ziua
Str. Lăpușneanu 12
Iași
Fișierul este în C:\date\note.txt
true

Exemplul 2: Repetarea unui text cu *

* este util pentru linii de separare și bare simple de progres.

void main() {
  print('=' * 20);
  var note = {'Ana': 9, 'Mihai': 6, 'Ioana': 10};
  note.forEach((nume, nota) {
    print('${nume.padRight(6)} ${'#' * nota} $nota');
  });
  print('=' * 20);
  print('ha' * 3);
  print('x' * 0 == '');
}

Rezultat

====================
Ana    ######### 9
Mihai  ###### 6
Ioana  ########## 10
====================
hahaha
true

Greșeli frecvente

  • Crezi că nume.toUpperCase() schimbă variabila. Textul este imutabil: scrie nume = nume.toUpperCase();.
  • Lipești un număr cu +: 'Nota: ' + 9 nu compilează. Folosește interpolarea: 'Nota: $nota'.
  • Pui * invers: 3 * '-' nu compilează. Textul trebuie să fie în stânga: '-' * 3.

Comenzi înrudite

  • String.length: length dă numărul de unități UTF-16 ale textului; isEmpty și isNotEmpty spun dacă textul este gol.
  • StringBuffer: Construiește un text din multe bucăți, eficient; la final toString() dă textul, iar clear() îl golește.
  • String.substring: substring extrage o bucată din text între două poziții; operatorul [] dă caracterul de la o poziție.
  • String.toUpperCase: Returnează textul transformat în litere mari (toUpperCase) sau mici (toLowerCase).