Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Jótanács
Ez a cikk az Alapismeretek szakasz része azon fejlesztők számára, akik már legalább egy programozási nyelvet ismernek, és c#-t tanulnak. Ha még csak most ismerkedik a programozással, először az Első lépések oktatóanyagokkal kezdje.
Más nyelvből érkezett?string.Split a C# megfelelője a Java String.split és a JavaScript String.prototype.split. Ezektől a nyelvektől eltérően a C# tömböt (string[]), nem listát ad vissza, az elválasztó argumentum pedig karakter vagy sztring, nem pedig reguláris kifejezés. A mintaalapú felosztásról lásd: Regex.Split.
A String.Split metódus egy sztringet egy vagy több elválasztójelet használó részsztringek tömbjeire bont. Ez a legegyszerűbb módja a tagolt szövegek, például szavak, CSV-stílusú értékek vagy protokoll jogkivonatok elemzésének.
A módszernek sok túlterhelése van, de négy független döntésre vonatkoznak:
-
Elválasztók: egy
char, egy tömb,charegystringvagy tömb.string - Maximális eredményszám: a visszaadott részsztringek számának korlátja.
- Az üres elemek kezelése: tartsa meg az üres részkarakterláncokat (ez az alapértelmezett), vagy hagyja el őket a(z) StringSplitOptions.RemoveEmptyEntries használatával.
- Üres karakterek kezelése: a StringSplitOptions.TrimEntries segítségével távolítsa el a kezdő és záró üres karaktereket minden bejegyzésből.
Karakterlánc szavakra bontása
Ha egy kifejezést szóköz mentén szeretne felosztani, adja meg a(z) ' ' értéket elválasztóként:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox>
// => <jumps>
// => <over>
// => <the>
// => <lazy>
// => <dog.>
Iterálja a visszaadott tömböt for az egyes szavak helyzetének helyreállításához:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
for (int i = 0; i < words.Length; i++)
{
Console.WriteLine($"Index {i}: <{words[i]}>");
}
// => Index 0: <The>
// => Index 1: <quick>
// => Index 2: <brown>
// => ...
Ha a bemenet az elválasztó karakter ismétlődő példányait tartalmazza, Split üres bejegyzéseket hoz létre, egyet az egymást követő elválasztók közötti "rések" között:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// The runs of spaces produce empty entries:
// => <The>
// => <quick>
// => <brown>
// => <>
// => <>
// => <>
// => <fox>
// => ...
Adja át a StringSplitOptions.RemoveEmptyEntries értéket az üres bejegyzések kihagyásához, ahogy a cikk későbbi részében látható.
Felosztás több elválasztó karakter alapján
Ha egynél több karakter elválasztóként is működhet, adja át őket tömbként. Az alábbi példa szóhatárként kezeli a szóközöket, a vesszőket, a pontokat, a kettőspontokat és a tabulátorokat:
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo three:four,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <three>
// => <four>
// => <five>
// => <six>
// => <seven>
A szomszédos elválasztók továbbra is üres bejegyzéseket hoznak létre:
char[] delimiters = [' ', ',', '.', ':', '\t'];
string text = "one\ttwo :,five six seven";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(delimiters);
Console.WriteLine($"{words.Length} words in text:");
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => 7 words in text:
// => <one>
// => <two>
// => <>
// => <>
// => <five>
// => <six>
// => <seven>
Felosztás többkarakteres elválasztóknál
Egész szavas vagy többkarakteres elválasztók mentén történő felbontáshoz adjon át egy karakterláncokból álló tömböt. A sztringtömb túlterheléséhez értékre van szükség StringSplitOptions . Akkor használható RemoveEmptyEntries , ha az ismétlődő elválasztók egyébként üres eredményeket eredményeznek:
string[] separators = ["<<", "..."];
string text = "one<<two......three<four";
Console.WriteLine($"Original text: '{text}'");
string[] words = text.Split(separators, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine($"{words.Length} substrings in text:");
foreach (var word in words)
{
Console.WriteLine(word);
}
// => 3 substrings in text:
// => one
// => two
// => three<four
Korlátozza a visszakapott részkarakterláncok számát
Adjon meg egy argumentumot count az eredmények számának leértékeléséhez. Az utolsó bejegyzés mindent tartalmaz, ami megmaradt, beleértve a fennmaradó elválasztókat is:
string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ', 4, StringSplitOptions.None);
foreach (var word in words)
{
Console.WriteLine($"<{word}>");
}
// => <The>
// => <quick>
// => <brown>
// => <fox jumps over the lazy dog.>
Ez a minta hasznos párok és más formátumok esetében key=value , ahol csak az első elválasztó használható.
Térköz vágása minden bejegyzésből
StringSplitOptions.TrimEntries eltávolítja a kezdő és záró üres karaktereket minden visszaadott részsztringből. Tipikus CSV-stílusú tisztításhoz kombinálhatja a(z) RemoveEmptyEntries elemmel:
string numerals = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10";
string[] trimmed = numerals.Split(',', StringSplitOptions.TrimEntries);
Console.WriteLine("Trimmed entries:");
foreach (var word in trimmed)
{
Console.WriteLine($"<{word}>");
}
string[] untrimmed = numerals.Split(',', StringSplitOptions.None);
Console.WriteLine("Untrimmed entries:");
foreach (var word in untrimmed)
{
Console.WriteLine($"<{word}>");
}
// => Trimmed entries: <1> <2> ... <10>
// => Untrimmed entries: <1> < 2> ... < 10>
Reguláris kifejezések használata
Split A rögzített karakter- vagy sztringelválasztók esetében jól működik. A mintaalapú felosztáshoz használja a(z) Regex.Split elemet. A sztringek reguláris kifejezéseinek bemutatása: Sztringműveletek.