Hogyan működnek a stringek valójában?
Karakterkódolások: ASCII vs UTF-8/16/32
- ASCII: 7 bites, angolra lett kitalálva. „John Wick” oké, de „Ł”, „ű”, „ß” már nem.
- UTF-8: 1-4 byte
- UTF-16: C# string belső kódolása
- UTF-32: fix 4 byte / karakter
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);