Ce face String.toCharArray
toCharArray() creează un char[] nou cu toate caracterele șirului. Array-ul este o copie: dacă îl modifici, șirul original rămâne la fel. Este util când vrei să sortezi literele, să le schimbi pe loc sau să parcurgi textul cu for-each.
getChars(srcBegin, srcEnd, dst, dstBegin) copiază caracterele de la srcBegin până la srcEnd (exclusiv) într-un array pe care îl ai deja, începând de la poziția dstBegin. Nu creează alt array.
Parametri
| Parametru | Descriere |
|---|---|
srcBegin, srcEnd |
Doar la getChars: porțiunea din șir, de la srcBegin inclusiv la srcEnd exclusiv. |
dst |
Array-ul destinație; trebuie să fie destul de mare. |
dstBegin |
Poziția din dst de unde se începe scrierea. |
Ce returnează
toCharArray(): un char[] nou. getChars(): nimic (void), scrie în dst.
Exemple
Exemplul 1: Sortarea literelor (verificare de anagrame)
Două cuvinte sunt anagrame dacă, după sortarea literelor, array-urile sunt egale.
import java.util.Arrays;
public class Main {
static boolean anagrame(String a, String b) {
char[] x = a.toCharArray();
char[] y = b.toCharArray();
Arrays.sort(x);
Arrays.sort(y);
return Arrays.equals(x, y);
}
public static void main(String[] args) {
System.out.println(anagrame("roma", "amor"));
System.out.println(anagrame("iasi", "cluj"));
char[] litere = "Brasov".toCharArray();
Arrays.sort(litere);
System.out.println(new String(litere));
}
}
Rezultat
true
false
Baorsv
Exemplul 2: Array-ul este o copie
public class Main {
public static void main(String[] args) {
String cuvant = "mere";
char[] c = cuvant.toCharArray();
c[0] = 'p';
System.out.println(new String(c));
System.out.println(cuvant);
for (char litera : c) {
System.out.print(litera + " ");
}
System.out.println();
}
}
Rezultat
pere
mere
p e r e
Exemplul 3: getChars într-un array existent
Copiem caracterele de la 4 la 8 (exclusiv) din șir la începutul unui buffer de 10 caractere completat cu puncte.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String text = "Jud. Iasi, Romania";
char[] buffer = new char[10];
Arrays.fill(buffer, '.');
text.getChars(5, 9, buffer, 0);
System.out.println(new String(buffer));
}
}
Rezultat
Iasi......
Greșeli frecvente
- Afișezi un
char[]concatenat cu text:"Litere: " + arrafișează ceva de forma[C@1b6d3586. Foloseștenew String(arr)sauArrays.toString(arr). - Te aștepți ca modificarea array-ului să schimbe șirul. Șirul nu se schimbă niciodată; construiește unul nou cu
new String(arr).
Comenzi înrudite
String.charAt: Returnează caracterul (char) de la poziția dată; prima poziție este 0, ultima este length() – 1.String.valueOf: Transformă orice valoare (număr, boolean, char, obiect, char[]) în String; copyValueOf face un șir dintr-un char[].String.chars: Returnează caracterele șirului ca IntStream (coduri numerice), ca să le prelucrezi cu operații de stream.String.getBytes: Transformă textul în octeți într-o codificare (UTF-8, ISO-8859-1…); encodedLength dă doar numărul de octeți.