簡體   English   中英

像Java中一樣,C#中是否有splitByCharacterType方法?

[英]is there a splitByCharacterType method in c# like there is in Java?

在Java中,有一個splitByCharacterType方法,它接受一個字符串,例如0015j8*( ,然后將其拆分為"0015","j","8","*","(" 。是否有這樣的內置函數?如果沒有,我將如何構建一個函數來做到這一點?

public static IEnumerable<string> SplitByCharacterType(string input)
{
    if (String.IsNullOrEmpty(input))
        throw new ArgumentNullException(nameof(input));

    StringBuilder segment = new StringBuilder();
    segment.Append(input[0]);
    var current = Char.GetUnicodeCategory(input[0]);

    for (int i = 1; i < input.Length; i++)
    {
        var next = Char.GetUnicodeCategory(input[i]);
        if (next == current)
        {
            segment.Append(input[i]);
        }
        else
        {
            yield return segment.ToString();
            segment.Clear();
            segment.Append(input[i]);
            current = next;
        }
    }
    yield return segment.ToString();
}

用法如下:

string[] split = SplitByCharacterType("0015j8*(").ToArray();

結果是"0015","j","8","*","("

我建議您實現為擴展方法。

我認為這種方法不存在。 您可以按照以下步驟創建自己的實用程序方法:

  1. 創建一個列表來保存拆分字符串
  2. 用所有字符類型定義字符串,例如

      string numberString = "0123456789"; string specialChars = "~!@#$%^&*(){}|\\/?"; string alphaChars = "abcde....XYZ"; 
  3. 定義一個變量來保存臨時字符串
  4. 定義一個變量以記下字符的類型
  5. 遍歷您的字符串,一次一個字符,通過檢查預定義類型字符串中char的存在來檢查char的類型。
  6. 如果type比以前的類型新(檢查type變量值),則將臨時字符串(非空)添加到列表中,將新的type分配給type variable並將當前的char分配給temp字符串。 否則,請將char附加到臨時字符串。
  7. 在遍歷末尾,將臨時字符串(非空)添加到列表中
  8. 現在,您的列表包含拆分字符串。
  9. 將列表轉換為字符串數組即可。

您也許可以使用正則表達式類,如下所示,但是您需要添加對除數字和字母之外的其他字符的支持。

   var chars = Regex.Matches("0015j8*(", @"((?:""[^""\\]*(?:\\.[^""\\]*)*"")|[a-z]|\d+)").Cast<Match>().Select(match => match.Value).ToArray(); 

結果0015,J,8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM