>
내 프로그램에는 약 25 개의 항목이 있으며 대부분은 문자열입니다. 그러나 그들 중 일부는 숫자가 있어야하며 출력에 해당 숫자가 필요하지 않습니다 (출력은 문자열 만되어야 함). 그렇다면 문자열에서 정수를 어떻게 "필터링"할 수 있습니까?

또한 정수, 문자열 및 문자가있는 경우 어떻게 할 수 있습니까 (예 : 하나의 ListBox  입장은 E#2 입니다 이고 이름이 E# 로 바뀌어야합니다.  출력으로 인쇄)?


  • 답변 # 1

    작품이 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() 대신 .

  • 답변 # 2

    이 LINQ 솔루션을 사용하여 문자열에서 모든 숫자를 제거 할 수 있습니다.

    string numbers = "Ho5w ar7e y9ou3?";
    string noNumbers = new string(numbers.Where(c => !char.IsDigit(c)).ToArray());
    
    

    번호 없음= "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!"
    
    

  • 답변 # 3

    시나리오가 무엇인지 정확히 알지 못하지만 문자열이 주어지면 해당 문자를 반복하고 숫자이면 출력에서 ​​버립니다.

    이것은 아마도 당신이 찾고있는 것입니다 :

    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에서 작동하는이 예제를 참조하십시오

  • 답변 # 4

    내가 틀리지 않은 경우 목록이 어떻게 표시됩니까?

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

    이제 코드를 쉽게 결합 할 수 있습니다 :)

  • 이전 c++ - 모든 입력 후 어레이 이름 스토리지 프로그램 충돌
  • 다음 &quot;No message&quot; error laravel - "메시지 없음"오류 laravel - 사용자 계정 정보를 업데이트하려고