String.toCharArray în Java

toCharArray() copiază șirul într-un array nou de char; getChars() copiază o porțiune într-un array existent.

Sintaxă
char[] toCharArray()
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

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: " + arr afișează ceva de forma [C@1b6d3586. Folosește new String(arr) sau Arrays.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.