Почему нет Char.Empty, как String.Empty? - PullRequest
236 голосов
/ 08 сентября 2010

Есть ли причина для этого? Я спрашиваю, потому что, если вам нужно использовать много пустых символов, вы попадаете в ту же ситуацию, что и при использовании большого количества пустых строк.

Редактировать: причина этого использования была:

myString.Replace ('c', '')

Так что удалите все экземпляры c из myString.

Ответы [ 19 ]

1 голос
/ 02 сентября 2015

Вы также можете перестроить строковый символ за символом, исключая символы, от которых вы хотите избавиться.

Вот метод расширения, чтобы сделать это:

    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"
1 голос
/ 29 января 2013

Не отвечает на ваш первый вопрос - но для конкретной проблемы вы можете просто использовать строки вместо символов, верно?:

myString.Replace("c", "")

Есть причина, по которой ты не хотел бы этого делать?

0 голосов
/ 04 сентября 2017

Самый простой способ полного удаления символа из строки - обрезать его

cl = cl.Trim(' ');

Удаляет все пробелы в строке

0 голосов
/ 26 июня 2016

Если вы хотите удалить символы, которые удовлетворяют определенному условию, вы можете использовать это:

string s = "SoMEthInG";
s = new string(s.ToCharArray().Where(c => char.IsUpper(c)).ToArray());

(в строке останутся только заглавные буквы.)

Другими словами, вы можете преобразовать строку в IEnumerable<char>, внести в нее изменения, а затем преобразовать ее обратно в строку, как показано выше.

Опять же, это позволяет не только удалять определенный символ из-за лямбда-выражения, но вы можете сделать это, если измените лямбда-выражение следующим образом: c => c != 't'.

0 голосов
/ 26 января 2016

использование

myString.Replace ("c", "")
0 голосов
/ 27 февраля 2015

Я знаю, что этот файл довольно старый, но недавно я столкнулся с проблемой необходимости делать несколько замен, чтобы сделать имя файла безопасным.Во-первых, в последней .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));
        }

    }

}
0 голосов
/ 05 сентября 2013

С точки зрения языка C # следующее может не иметь особого смысла.И это не прямой ответ на вопрос.Но охота на мясо это то, что я делал в одном из моих бизнес-сценариев

        char? myCharFromUI = Convert.ToChar(" ");
        string myStringForDatabaseInsert = myCharFromUI.ToString().Trim();
        if (String.IsNullOrEmpty(myStringForDatabaseInsert.Trim()))
        {
            Console.Write("Success");
        }

В null и white space были разные бизнес-потоки в моем проекте.При вставке в базу данных мне нужно вставить empty string в базу данных, если это пробел.

0 голосов
/ 26 июня 2013

Если вы хотите уменьшить пустой символ в строке, сработает следующее, просто преобразуйте в любое представление типа данных, которое вы хотите.спасибо,

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());
            }

        }

    }
0 голосов
/ 10 сентября 2010

Как насчет BOM , магический символ, который Microsoft добавляет для запуска файлов (по крайней мере, XML)?

...