首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 字符串按字符類型分類:為什麼數字進不了 List?

     編輯:程式設計綜合問答

問題代碼


string s = "abc123";
List<char> number = new List<char>();
List<char> alphabet = new List<char>();

for (int i = 0; i < s.Length; i++)
{
    if (s[i] is int) // 永遠為 false
        number.Add(s[i]);
    else
        alphabet.Add(s[i]);
}

核心誤區

  • string 中每個元素類型是 char(Unicode 字符),永遠不是 int。
  • s[i] is int 編譯通過但運行時恆為 false,導致數字字符全進 alphabet。

正確判斷方法

1. char.IsDigit / char.IsLetter(推薦)


foreach (char c in s)
{
    if (char.IsDigit(c))
        number.Add(c);
    else if (char.IsLetter(c))
        alphabet.Add(c);
    else
        other.Add(c); // 處理空格、標點、換行符等
}

2. 正則表達式分組


var digits = Regex.Matches(s, @"\d").Cast<Match>().Select(m => m.Value[0]).ToList();
var letters = Regex.Matches(s, @"[a-zA-Z]").Cast<Match>().Select(m => m.Value[0]).ToList();

3. LINQ 一行式


var number = s.Where(char.IsDigit).ToList();
var alphabet = s.Where(char.IsLetter).ToList();

補充:常見字符分類方法

方法說明
char.IsDigit(c)0-9
char.IsLetter(c)字母(含非 ASCII)
char.IsLetterOrDigit(c)字母或數字
char.IsWhiteSpace(c)空白字符
char.IsPunctuation(c)標點符號
char.IsControl(c)控制字符(\r, \n, \t 等)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved