// 4. hét – Karakterkódolás: char, kódpont, UTF-8 bájtok
// Futtatás: java Encoding.java
import java.nio.charset.StandardCharsets;

public class Encoding {
    public static void main(String[] args) {
        String s = "Aé世😀";

        // A Java String belül UTF-16 kódegységekből (char) áll.
        // A BMP-n kívüli karakterek (pl. emoji) KÉT char-t foglalnak (surrogate pár).
        System.out.println("length()          = " + s.length());                         // 5
        System.out.println("codePointCount()  = " + s.codePointCount(0, s.length()));   // 4
        System.out.println("UTF-8 bájtok száma = " + s.getBytes(StandardCharsets.UTF_8).length); // 10

        // Kódpontok bejárása – így minden "valódi" karaktert egyszer kapunk meg
        s.codePoints().forEach(cp ->
                System.out.printf("  %s  U+%04X  (%d)%n", new String(Character.toChars(cp)), cp, cp));

        // UTF-8 bájtok kiírása
        System.out.print("UTF-8: ");
        for (byte b : s.getBytes(StandardCharsets.UTF_8)) System.out.printf("%02X ", b);
        System.out.println();

        // A char-onkénti bejárás az emojit két "fél" karakterre vágja!
        System.out.print("char-onként: ");
        for (int i = 0; i < s.length(); i++) System.out.printf("%04X ", (int) s.charAt(i));
        System.out.println();

        // ASCII aritmetika
        char c = 'c';
        System.out.println("'c' - 'a' = " + (c - 'a') + " (a betű sorszáma az ábécében)");
        System.out.println("'7' - '0' = " + ('7' - '0') + " (számjegy karakter -> érték)");
    }
}
