Почему нет Char.Empty как String.Empty?
Есть ли причина для этого? Я спрашиваю об этом, потому что если вам нужно использовать много пустых char, тогда вы попадаете в ту же ситуацию, что и в случае использования большого количества пустых строк.
Изменить: причиной этого было следующее:
myString.Replace ('c', '')
Поэтому удалите все экземпляры 'c из myString.
Ответы
Ответ 1
Нет такой вещи, как пустой char. Ближе всего вы можете получить '\0'
, символ Unicode "null". Учитывая, что вы можете встроить это в строковые литералы или выразить его очень легко, зачем вам нужно отдельное поле? Точно так же "легко ввести в заблуждение аргументы ""
и " "
" не относятся к '\0'
.
Если бы вы могли привести пример того, где вы хотите его использовать, и почему вы думаете, что это было бы лучше, это могло бы помочь...
Ответ 2
Ваше выражение
myString.Replace ('c', '\0')
Не удалять символы. Он просто заменит их на '\0'
(End-Of-String, EOS) с различными последствиями. Некоторые операции с строкой могут останавливаться при встрече с EOS, но в .NET большинство действий будут обрабатывать его, как и любой другой char. Лучше избегать '\0'
как можно больше.
Причиной этого использования было следующее: myString.Replace ('c', '')
Поэтому удалите все экземпляры 'c'
из myString.
Чтобы удалить конкретный char из строки, вы можете использовать перегрузку строки:
myString = myString.Replace ("c", String.Empty);
Ответ 3
A char, в отличие от строки, является дискретной вещью с фиксированным размером. Строка действительно представляет собой контейнер символов.
Итак, Char.Empty на самом деле не имеет смысла в этом контексте. Если у вас есть char, он не пуст.
Ответ 4
Нет такой вещи, как пустой символ. Он всегда содержит что-то. Даже "\ 0" является символом.
Ответ 5
Используйте Char.MinValue
, который работает так же, как "\ 0". Но будьте осторожны, это не то же самое, что String.Empty
.
Ответ 6
Вы можете использовать nullable chars.
char? c
Ответ 7
Если вам не нужна вся строка, вы можете воспользоваться задержкой выполнения:
public static class StringExtensions
{
public static IEnumerable<char> RemoveChar(this IEnumerable<char> originalString, char removingChar)
{
return originalString.Where(@char => @char != removingChar);
}
}
Вы даже можете комбинировать несколько символов...
string veryLongText = "abcdefghijk...";
IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
.RemoveChar('c')
.RemoveChar('d')
.Take(5);
... и будут оценены только первые 7 символов:)
EDIT: или, что еще лучше:
public static class StringExtensions
{
public static IEnumerable<char> RemoveChars(this IEnumerable<char> originalString,
params char[] removingChars)
{
return originalString.Except(removingChars);
}
}
и его использование:
var veryLongText = "abcdefghijk...";
IEnumerable<char> firstFiveCharsWithoutCsAndDs = veryLongText
.RemoveChars('c', 'd')
.Take(5)
.ToArray(); //to prevent multiple execution of "RemoveChars"
Ответ 8
по той же причине не существует int.Empty
. Контейнеры могут быть пустыми. Скалярных значений быть не может. Если вы имеете в виду 0 (что не пусто), используйте '\0'
. Если вы имеете в виду null
, используйте null
:)
Ответ 9
A char - тип значения, поэтому его значение не может быть нулевым. (Если он не упакован в контейнер Nullable).
Поскольку он не может быть нулевым, в нем содержится некоторый числовой код, и каждый код сопоставляется с каким-либо символом.
Ответ 10
Не ответ на ваш вопрос, но для обозначения значения по умолчанию char
вы можете использовать только
default(char)
который аналогичен char.MinValue
, который, в свою очередь, такой же, как \0
. Не следует использовать, если для чего-то вроде пустой строки.
Ответ 11
myString = myString.Replace('c'.ToString(), "");
ОК, это не особенно элегантно для удаления букв, так как метод .Replace имеет перегрузку, которая принимает строковые параметры. Но это работает для удаления возвратов каретки, фидов строк, вкладок и т.д. В этом примере удаляются символы табуляции:
myString = myString.Replace('\t'.ToString(), "");
Ответ 12
использовать
myString.Replace ("c", "")
Ответ 13
Как насчет спецификация, магический символ Microsoft добавляет к началу файлов (по крайней мере, XML)?
Ответ 14
Не отвечает на ваш первый вопрос - но для конкретной проблемы, которую вы имели, вы можете просто использовать строки вместо символов, не так ли?:
myString.Replace("c", "")
Есть причина, по которой вы не хотели бы этого делать?
Ответ 15
если вы хотите эллимировать пустую строку char в следующей последовательности, выполните следующие действия: просто конвертируйте в любое представление типа данных, которое вы хотите. спасибо,
private void button1_Click(object sender, EventArgs e)
{
Int32 i;
String name;
Int32[] array_number = new int[100];
name = "1 3 5 17 8 9 6";
name = name.Replace(' ', 'x');
char[] chr = name.ToCharArray();
for (i = 0; i < name.Length; i++)
{
if ((chr[i] != 'x'))
{
array_number[i] = Convert.ToInt32(chr[i].ToString());
MessageBox.Show(array_number[i].ToString());
}
}
}
Ответ 16
В терминах языка С# следующее может не иметь особого смысла. И это не прямой ответ на вопрос. Но птица - это то, что я сделал в одном из моих бизнес-сценариев
char? myCharFromUI = Convert.ToChar(" ");
string myStringForDatabaseInsert = myCharFromUI.ToString().Trim();
if (String.IsNullOrEmpty(myStringForDatabaseInsert.Trim()))
{
Console.Write("Success");
}
null
и white space
имели разные бизнес-потоки в моем проекте. При вставке в базу данных мне нужно вставить empty string
в базу данных, если это пробел.
Ответ 17
Я знаю, что этот довольно старый, но недавно я столкнулся с проблемой, когда мне пришлось сделать несколько замен, чтобы сделать имя файла безопасным. Во-первых, в последней версии .NET string.Replace функция null является эквивалентом пустого символа. Сказав это, то, что отсутствует в .Net, является простой заменой всего, что заменит любой символ в массиве желаемым символом. Не стесняйтесь ссылаться на приведенный ниже код (выполняется в LinqPad для тестирования).
// LinqPad .ReplaceAll and SafeFileName
void Main()
{
("a:B:C").Replace(":", "_").Dump(); // can only replace 1 character for one character => a_B_C
("a:B:C").Replace(":", null).Dump(); // null replaces with empty => aBC
("a:B*C").Replace(":", null).Replace("*",null).Dump(); // Have to chain for multiples
// Need a ReplaceAll, so I don't have to chain calls
("abc/123.txt").SafeFileName().Dump();
("abc/1/2/3.txt").SafeFileName().Dump();
("a:bc/1/2/3.txt").SafeFileName().Dump();
("a:bc/1/2/3.txt").SafeFileName('_').Dump();
//("abc/123").SafeFileName(':').Dump(); // Throws exception as expected
}
static class StringExtensions
{
public static string SafeFileName(this string value, char? replacement = null)
{
return value.ReplaceAll(replacement, ':','*','?','"','<','>', '|', '/', '\\');
}
public static string ReplaceAll(this string value, char? replacement, params char[] charsToGo){
if(replacement.HasValue == false){
return string.Join("", value.AsEnumerable().Where(x => charsToGo.Contains(x) == false));
}
else{
if(charsToGo.Contains(replacement.Value)){
throw new ArgumentException(string.Format("Replacement '{0}' is invalid. ", replacement), "replacement");
}
return string.Join("", value.AsEnumerable().Select(x => charsToGo.Contains(x) == true ? replacement : x));
}
}
}
Ответ 18
Вы также можете перестроить свой строковый символ символом, за исключением символов, от которых вы хотите избавиться.
Здесь используется метод расширения:
static public string RemoveAny(this string s, string charsToRemove)
{
var result = "";
foreach (var c in s)
if (charsToRemove.Contains(c))
continue;
else
result += c;
return result;
}
Это не скользкий или причудливый, но он работает хорошо.
Используйте это:
string newString = "My_String".RemoveAny("_"); //yields "MyString"
Ответ 19
Если вы хотите удалить символы, удовлетворяющие определенному условию, вы можете использовать это:
string s = "SoMEthInG";
s = new string(s.ToCharArray().Where(c => char.IsUpper(c)).ToArray());
(Это оставит только строчные буквы в строке.)
Другими словами, вы можете преобразовать строку в IEnumerable<char>
, внести изменения в нее и затем преобразовать ее в строку, как показано выше.
Опять же, это позволяет не только удалить конкретный char из-за лямбда-выражения, хотя вы можете это сделать, если вы измените выражение лямбда следующим образом: c => c != 't'
.
Ответ 20
Самый простой способ обложки удалить символ из строки - это Trim it
cl = cl.Trim(' ');
Удаляет все пробелы в строке