Używam tej Split()
metody do dzielenia ciągów, ale wydaje się, że działa to tylko wtedy, gdy dzielisz ciąg znaków na znak. Czy istnieje sposób na podzielenie a string
, przy czym innym ciągiem jest podział według parametru?
Próbowałem przekształcić rozdzielacz w tablicę znaków, ale bez powodzenia.
Innymi słowy, chciałbym podzielić string
:
THExxQUICKxxBROWNxxFOX
przez xx
i zwraca tablicę z wartościami:
SZYBKI BRĄZOWY LIS
Odpowiedzi:
Aby podzielić przez ciąg, musisz użyć przeciążenia tablicy ciągów .
źródło
string.Split
.string[] Split(string pattern)
, co jest najbardziej naturalnym sposobem, jaki mogłem wymyślić, ale jeszcze go nie ma. Napisałem C wcześniej, więc jestem przyzwyczajony do znakowania tablic, ale nadal nie lubię patrzeć nachar[]
wyskakujące kody C #, ponieważ nagle przyciąga moją uwagę z poziomu strumienia na poziom bajtów. Czy ktoś wie, dlaczego faceci z biblioteki C # zaprojektowali taką metodę podziału? Jeśli istnieje dobry powód, prawdopodobnie będę mógł docenić to pomimo niedogodności.data.Split("xx")
?Istnieje przeciążenie Split, które wymaga ciągów.
Możesz użyć jednego z tych StringSplitOptions
Więc jeśli ciąg jest „THExxQUICKxxxxBROWNxxFOX”,
StringSplitOptions.None
zwróci pusty wpis w tablicy dla części „xxxx”, podczas gdyStringSplitOptions.RemoveEmptyEntries
nie.źródło
zwykle tak robię.
Oczywiście potrzebujesz:
lub:
ale znowu potrzebuję tej biblioteki przez cały czas.
źródło
RegEx.Split
jest nieco bardziej kosztowne niż prosteString.Split
ze względu na narzut wyrażeń regularnych.Regex.Escape
go najpierw, spowoduje to uniknięcie meta-znaków wyrażenia regularnego.Jest w tym przeciążenie String.Split :
źródło
Zasadniczo lubię używać własnego rozszerzenia:
Doprowadzi to jednak do wyjątku, jeśli Microsoft zdecyduje się uwzględnić to przeciążenie metody w późniejszych wersjach. Jest to również prawdopodobny powód, dla którego Microsoft nie uwzględnił w międzyczasie tej metody: przynajmniej jedna firma, w której pracowałem, zastosowała takie rozszerzenie we wszystkich swoich projektach C #.
Może być również możliwe warunkowe zdefiniowanie metody w czasie wykonywania, jeśli nie istnieje.
źródło
params string[] splitter
jako drugi parametr i zmianynew[] {splitter}
dosplitter
obsługi wielu ograniczników.Wszystkie poprzednie odpowiedzi są poprawne. Idę o krok dalej i sprawiam, że C # działa dla mnie, definiując metodę rozszerzenia String:
W ten sposób mogę nazwać go dowolnym ciągiem w prosty sposób, którego naiwnie oczekiwałem przy pierwszej próbie:
źródło
Od wersji .NET Core 2.0 istnieje zastąpienie, które pobiera ciąg.
Więc teraz możesz to zrobić
"THExxQUICKxxBROWNxxFOX".Split("xx")
.Zobacz https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-2.0#System_String_Split_System_String_System_StringSplitOptions_
źródło
Po prostu ostrożnie wybierz zamień znak (wybierz taki, który prawdopodobnie nie będzie już obecny w ciągu)!
źródło
|
już znak, z tego powodu uważam, że korzystanie z niego jest niebezpieczne.Jest to również łatwe:
źródło
"THExQUICK"
tam, gdzie nie chcemy, aby zostało podzieloneNajprostszym sposobem jest użycie
String.Replace
:Lub prościej:
źródło
xx
były.