Ce face String.codeUnitAt
Intern, un String Dart este o listă de unități de cod UTF-16, numere între 0 și 65535. codeUnitAt(i) returnează numărul de la poziția i, iar codeUnits returnează toată lista. Pentru literele obișnuite numărul este codul Unicode: 'A' are 65, 'a' are 97, 'ș' are 537.
Caracterele care nu încap într-o unitate (emoji, unele simboluri) ocupă două unități (o „pereche surogat”). runes rezolvă asta: dă codurile Unicode reale (puncte de cod), câte unul pentru fiecare caracter. '😀'.codeUnits are două numere, '😀'.runes are unul: 128512.
Codurile sunt utile pentru calcule simple: poziția unei litere în alfabet (cod - 97), verificarea dacă un caracter este cifră (48–57) sau cifruri ca cel al lui Cezar. Pentru operația inversă, de la cod la text, vezi String.fromCharCode.
Parametri
| Parametru | Descriere |
|---|---|
index |
Poziția (de la 0). |
Ce returnează
codeUnitAt: un int. codeUnits: un List<int> nemodificabil. runes: un Runes (un Iterable<int>).
Exemple
Exemplul 1: Unități de cod și puncte Unicode
void main() {
print('A'.codeUnitAt(0));
print('Ana'.codeUnits);
print('ș'.codeUnitAt(0));
print('Iași 😀'.codeUnits);
print('Iași 😀'.runes.toList());
print('Iași 😀'.length);
print('Iași 😀'.runes.length);
}
Rezultat
65
[65, 110, 97]
537
[73, 97, 537, 105, 32, 55357, 56832]
[73, 97, 537, 105, 32, 128512]
7
6
Exemplul 2: Cifrul lui Cezar
Fiecare literă mică este mutată cu 3 poziții în alfabet; restul caracterelor rămân la fel.
String cezar(String text, int pas) {
var rezultat = text.codeUnits.map((c) {
if (c >= 97 && c <= 122) {
return (c - 97 + pas) % 26 + 97;
}
return c;
});
return String.fromCharCodes(rezultat);
}
void main() {
var secret = cezar('ne vedem la iasi', 3);
print(secret);
print(cezar(secret, 23));
}
Rezultat
qh yhghp od ldvl
ne vedem la iasi
Exemplul 3: Numărarea cifrelor dintr-un text
void main() {
var text = 'Comanda 2026/145 a costat 89 lei';
var cifre = 0;
for (var i = 0; i < text.length; i++) {
var c = text.codeUnitAt(i);
if (c >= 48 && c <= 57) cifre++;
}
print('Cifre: $cifre');
}
Rezultat
Cifre: 9
Greșeli frecvente
- Parcurgi
codeUnitsca să numeri caracterele unui text cu emoji: le numeri de două ori. Foloseșterunes. - Încerci
text.codeUnits.add(65): lista este nemodificabilă și aruncăUnsupportedError.
Comenzi înrudite
String.fromCharCode: Construiește un text dintr-un cod de caracter (fromCharCode) sau dintr-o listă de coduri (fromCharCodes).String.length: length dă numărul de unități UTF-16 ale textului; isEmpty și isNotEmpty spun dacă textul este gol.StringBuffer.writeAll: writeAll adaugă toate elementele unei colecții, cu un separator opțional; writeCharCode adaugă un caracter după cod.