Обнаружение и изменение записей ListBox, содержащих цифры - PullRequest
0 голосов
/ 29 апреля 2018

В моей программе около 25 записей, большинство из которых только строковые. Однако некоторые из них должны содержать цифры, и мне не нужны эти цифры в выходных данных (выходные данные должны быть только строковыми). Итак, как я могу "отфильтровать" целые числа из строк?

Кроме того, если у меня есть целые числа, строки и символы, как я могу это сделать (например, одна запись ListBox имеет значение E#2 и должна быть переименована в E#, а затем напечатана как выходная)?

Ответы [ 4 ]

0 голосов
/ 29 апреля 2018

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

Может быть, это то, что вы ищете:

string entry = "E#2";
char[] output = new char[entry.Length];

for(int i = 0, j =0; i < entry.Length ; i++)
{
    if(!Char.IsDigit(entry[i]))
    {
        output[j] = entry[i];
        j++;
    }
}

Console.WriteLine(output);

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

Смотрите этот пример, работая на C # Online Compiler

0 голосов
/ 29 апреля 2018

С помощью этого решения LINQ вы можете удалить все числа из строк:

string numbers = "Ho5w ar7e y9ou3?";

string noNumbers = new string(numbers.Where(c => !char.IsDigit(c)).ToArray());

noNumbers = "How are you?"

Но вы также можете удалить все числа из строки, используя цикл foreach:

string numbers = "Ho5w ar7e y9ou3?";

List<char> noNumList = new List<char>();

foreach (var c in numbers)
{
    if (!char.IsDigit(c))
        noNumList.Add(c);            
}

string noNumbers = string.Join("", noNumList);

Если вы хотите удалить все числа из строк внутри коллекции:

List<string> myList = new List<string>() { 
"Ho5w ar7e y9ou3?", 
"W9he7re a3re y4ou go6ing?",
"He2ll4o!" 
};

List<char> noNumList = new List<char>();

for (int i = 0; i < myList.Count; i++)
{
    foreach (var c in myList[i])
    {
        if(!char.IsDigit(c))
            noNumList.Add(c);
    }
    myList[i] = string.Join("", noNumList);
    noNumList.Clear();
}

myList Вывод:

"How are you?"
"Where are you going?"
"Hello!"
0 голосов
/ 29 апреля 2018

Предполагая, что ваши записи находятся в List<string>, вы можете пройти по списку, а затем по каждому символу каждой записи, затем проверить, является ли это число, и удалить его. Как то так:

List<string> list = new List<string>{ "abc123", "xxx111", "yyy222" };
for (int i = 0; i < list.Count; i++) {
    var no_numbers = "";
    foreach (char c in list[i]) {
        if (!Char.IsDigit(c))
            no_numbers += c;
    }
    list[i] = no_numbers;
}

Это удаляет цифры только так, как вы хотели от вашего вопроса. Если вы хотите удалить все другие символы, кроме букв, вы можете немного изменить логику и использовать Char.IsLetter() вместо Char.IsDigit().

0 голосов
/ 29 апреля 2018

Если я не ошибаюсь, может, так выглядит ваш список?

ABCD123
EFGH456

И ваш ожидаемый результат:

ABCD
EFGH

Это правильно? Если это так, предполагая, что это List<string>, то вы можете использовать следующий код:

  list<string> mylist = new list<string>;

  foreach(string item in mylist)
   {

    ///To get letters/alphabets
    var letters = new String(item.Where(Char.IsLetter).ToArray());

    ///to get special characters

    var letters = new String(item.Where(Char.IsSymbol).ToArray())
   }

Теперь вы можете легко комбинировать коды:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...