Czy jest tego powód? Pytam, ponieważ jeśli musisz użyć wielu pustych znaków, to znajdziesz się w takiej samej sytuacji, jak wtedy, gdy używasz wielu pustych łańcuchów.
Edycja: Powodem tego użycia było:
myString.Replace ('c', '')
Więc usuń wszystkie wystąpienia 'c's z myString.
RemoveAll(this string s, params char[] toRemove)
? Cel zostanie wyraźnie przekazany i nie ryzykujesz błędnego wpisania.""
tworzy obiekt : Nie, nie robi.Odpowiedzi:
Nie ma czegoś takiego jak pusty znak. Najbliżej można uzyskać
'\0'
znak zerowy Unicode. Biorąc pod uwagę, że możesz bardzo łatwo osadzić to w literałach łańcuchowych lub samodzielnie, dlaczego miałbyś chcieć dla niego osobnego pola? Podobnie argumenty „ łatwo pomylić""
i" "
” nie mają zastosowania'\0'
.Jeśli możesz podać przykład, gdzie chcesz go użyć i dlaczego uważasz, że byłoby lepiej, może to pomóc ...
źródło
Int32.Zero
, czy użyłbyś tego zamiast dosłownie 0? Jeśli nie, jaka jest tutaj różnica?Znak, w przeciwieństwie do łańcucha, jest dyskretną rzeczą o ustalonym rozmiarze. Sznurek jest naprawdę pojemnikiem znaków.
Tak więc Char.Empty tak naprawdę nie ma sensu w tym kontekście. Jeśli masz znak, nie jest pusty.
źródło
Nie ma czegoś takiego jak pusta postać. Zawsze coś zawiera . Nawet „\ 0” jest znakiem.
źródło
Użyj,
Char.MinValue
który działa tak samo jak „\ 0”. Ale bądź ostrożny, to nie to samo, coString.Empty
.źródło
Możesz użyć zerowalnych znaków.
źródło
Jeśli nie potrzebujesz całego ciągu, możesz skorzystać z opóźnionego wykonania:
Możesz nawet łączyć wiele znaków ...
... i tylko pierwszych 7 znaków będzie ocenianych :)
EDYCJA: lub jeszcze lepiej:
i jego użycie:
źródło
OK, nie jest to szczególnie eleganckie do usuwania liter, ponieważ metoda .Replace ma przeciążenie, które przyjmuje parametry ciągu. Działa to jednak w przypadku usuwania znaków powrotu karetki, przesuwu linii, tabulatorów itp. Ten przykład usuwa znaki tabulacji:
źródło
z tego samego powodu nie ma
int.Empty
. Pojemniki mogą być puste. Wartości skalarne nie mogą być. Jeśli masz na myśli 0 (która nie jest pusta), użyj'\0'
. Jeśli masz na myślinull
, użyjnull
:)źródło
Char jest typem wartości, więc jego wartość nie może być pusta. (Chyba że jest zapakowane w pojemnik Nullable).
Ponieważ nie może mieć wartości null, in zawiera trochę kodu numerycznego, a każdy kod jest odwzorowany na jakiś znak.
źródło
Nie jest to odpowiedź na twoje pytanie, ale jako domyślną
char
możesz użyć tylkoktóry jest taki sam jak ten,
char.MinValue
który z kolei jest taki sam jak\0
. Nie należy jednak używać tego do pustych ciągów.źródło
Nie odpowiada na twoje pierwsze pytanie - ale w przypadku konkretnego problemu, który miałeś, możesz po prostu używać ciągów zamiast znaków, prawda ?:
Jest powód, dla którego nie chcesz tego robić?
źródło
Możesz także odbudować ciąg znaków po znaku, z wyłączeniem znaków, których chcesz się pozbyć.
Oto metoda rozszerzenia, aby to zrobić:
Nie jest zręczny ani fantazyjny, ale działa dobrze.
Użyj w ten sposób:
źródło
StringBuilder
doresult
. Dlaczego nie owinąćreturn s.Replace(charsToRemove,"");
?Jeśli chcesz usunąć znaki, które spełniają określony warunek, możesz użyć tego:
(Spowoduje to pozostawienie tylko wielkich liter w ciągu).
Innymi słowy, możesz „użyć” łańcucha jako
IEnumerable<char>
, wprowadzić w nim zmiany, a następnie przekonwertować go z powrotem na ciąg, jak pokazano powyżej.Znowu ten pozwala nie tylko usunąć konkretny char ponieważ wyrażenia lambda, chociaż można to zrobić, jeśli zmienić wyrażenie lambda tak:
c => c != 't'
.źródło
Co powiesz na BOM , magiczną postać, którą Microsoft dodaje do początku plików (przynajmniej XML)?
źródło
myString.Replace ('c', '')
można to osiągnąćmyString.Replace ('c', UTF_BOM)
. Powiedziałbym wtedy, że odpowiedź brzmi „jak nie o…”.jeśli chcesz wyeliminować pusty znak w ciągu, następujące działania będą działać, wystarczy przekonwertować na dowolną reprezentację typu danych, którą chcesz. dzięki,
źródło
Jeśli chodzi o język C #, poniższe mogą nie mieć większego sensu. I to nie jest bezpośrednia odpowiedź na pytanie. Ale fowlloing zrobiłem w jednym ze scenariuszy biznesowych
null
Iwhite space
płynie miał inny obiekt w moim projekcie. Podczas wstawiania do bazy danych muszę wstawiaćempty string
do bazy danych, jeśli jest to spacja.źródło
Wiem, że ten jest dość stary, ale ostatnio napotkałem problem z koniecznością wielokrotnego zastępowania, aby nazwa pliku była bezpieczna. Po pierwsze, w najnowszym ciągu .NET Funkcja zamiany null jest równoważna pustemu znakowi. Powiedziawszy to, brakuje w .Net prostego zastąpienia wszystkich, które zastąpią dowolny znak w tablicy żądanym znakiem. Zachęcamy do zapoznania się z poniższym kodem (działa w LinqPad do testowania).
źródło
posługiwać się
źródło
Najłatwiejszym sposobem na usunięcie koca z łańcucha znaków jest Przytnij go
cl = cl.Trim(' ');
Usuwa wszystkie spacje w ciągu
źródło