Hogyan működnek a stringek valójában?

Karakterkódolások: ASCII vs UTF-8/16/32

Hogyan tárolja a C# a stringeket?

A C# string egy immutable char[]. Minden módosítás új stringet hoz létre → használd a StringBuilder-t nagyobb műveletekhez.

Kódolások közti átváltás

string name = "John Wick";
byte[] utf8Name = Encoding.UTF8.GetBytes(name);
string originalName = Encoding.UTF8.GetString(utf8);

byte[] ⇄ string

byte[] data = Encoding.UTF8.GetBytes("Pete Maverick Mitchell");
string s = Encoding.UTF8.GetString(data);

Stringek létrehozása

Alapok

string hero = "John Wick";
string enemy = "High Table";
string message = hero + " vs " + enemy; // "John Wick vs High Table"

Stringek interpolálása ("részek" közé beillesztés)

string target = "Xenomorph";
string msg = $"{target} detected on LV-426!"; // "Xenomorph detected on LV-426!"

Konverziók

int kills = 439;
string text = kills.ToString(); // "439"

StringBuilder

var sb = new StringBuilder();
sb.Append("Rambo ");
sb.Append("is entering ");
sb.Append("Burma.");
string result = sb.ToString();

Ismétlődő karakterek

string line = new string('-', 20);

Stringek módosítása

Hozzáadás

string h = "Terminator";
h += " T-800"; // "Terminator T-800"

Minden összefűzés új stringet hoz létre.

Gyakori függvények

"Neo".ToUpper();             // "NEO"
"Michael Myers".ToLower();   // "michael myers"
"Die Hard".Split(' ');       // ["Die", "Hard"]
"   Matrix   ".Trim();       // "Matrix"
string.Concat("Top", "Gun"); // "TopGun"
"AlienEgg".Insert(5, "_");   // "Alien_Egg"
"AlienEgg".Remove(0,2);      // "ienEgg"
"Facehugger".Substring(4);   // "Face"
"Jason".Replace("J","M");    // "Mason"

Range slicing (C# 8+)

string s = "Anderson";
string mid = s[1..5]; // "nder"

Keresés, vágás, indexek

"Terminator".IndexOf("n");     // 5 (int)
"Terminator".LastIndexOf("r"); // 9 (int)
"TopGun".StartsWith("Top");    // true (bool)
"Halloween".EndsWith("ween");  // true (bool)
"Rambo".Contains("am");        // true (bool)

Formázás és igazítás

Igazítás

"John Wick".PadLeft(15);
"Rambo".PadRight(10,'.');

string.Format

string msg = string.Format(
    "Target: {0}, Threat Level: {1}",
    "T-800",
    "Extreme"
);
// "Target: T-800, Threat Level: Extreme"

Kompozit formátum

Számok

double flightHours = 1543.5;
$"{flightHours:N1}";   // 1,543.5

int ammo = 12000;
$"{ammo:N0}";          // 12,000

Dátumok

// DateTime mission = DateTime.Parse("2025-02-1");

DateTime mission = new DateTime(2025, 2, 1);
$"{mission:yyyy-MM-dd}";        // "2025-02-01"
mission.ToString("yyyy-MM-dd"); // "2025-02-01"

Escape karakterek

string path = "C:\\Matrix\\Neo";
string line = "John Wick said:\n\"Guns. Lots of guns.\"";

Regex 🤢

var pattern = @"Rambo\d+";
Regex.IsMatch("Rambo2 is back", pattern);

Regex.Matches("T-800 T-1000 T-850 valamiMas", @"T-\d+"); // ["T-800", "T-1000", "T-850"]

Verbatim string-ek

string sql = @"
SELECT *
FROM Targets
WHERE Name = 'John Wick'
";

string dbPath = @"C:\TheMatrix\Heart_o_The_City\room303.sqlite";

Ha pedíg úgy kell használni a verbatim stringet, mint az interpoláltat akkor:

string dbPath = $@"C:\TheMatrix\Heart_o_The_City\{filename}.sqlite";

SQL injection - soha ne így!:

$"SELECT * FROM Targets WHERE Name = '{name}'"

Helyesen:

SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM Targets WHERE Name = @name";
cmd.Parameters.AddWithValue("@name", name);