【问题标题】:How to split a number into individual digits in c#? [duplicate]如何在c#中将数字拆分为单个数字? [复制]
【发布时间】:2019-11-11 12:52:55
【问题描述】:

假设我有 12345。

我希望每个号码都有单独的项目。一个字符串甚至是一个单独的数字。

.Split 方法对此有重载吗?

【问题讨论】:

    标签: c# string


    【解决方案1】:

    我会使用模数和循环。

    int[] GetIntArray(int num)
    {
        List<int> listOfInts = new List<int>();
        while(num > 0)
        {
            listOfInts.Add(num % 10);
            num = num / 10;
        }
        listOfInts.Reverse();
        return listOfInts.ToArray();
    }
    

    【讨论】:

    • 这是一个不错的方法。但它将排除起始零,即 0123。如果我也需要启动 0 。怎么办?
    • @SaimMehmood 0123 不是数字
    • 0 是一个数字,但它会被排除在外 :) do...while 会成功
    • @Tommy 如果需要,我会在顶部添加 if(num == 0) { return new int[] {0}; } 或类似的东西,如果开发团队的标准是针对 1 个返回声明等等等。在我原来的帖子中,我说我不是粉丝字符串...我不是 do...whiles 的粉丝...
    • @Biff MaGriff 无论如何都会让它工作。字符串除外。也不是粉丝。
    【解决方案2】:

    这样的事情会起作用,使用 Linq:

    string result = "12345"
    var intList = result.Select(digit => int.Parse(digit.ToString()));
    

    这将为您提供一个 IEnumerable 整数列表。

    如果你想要一个 IEnumerable 字符串:

    var intList = result.Select(digit => digit.ToString());
    

    或者如果你想要一个字符串列表:

    var intList = result.ToList();
    

    【讨论】:

    • .Parse(.ToString)!?感觉。它没有。
    • @Randy,你修改答案了吗?以前是对的,现在错了。这将返回stringIEnumerable。 (我刚改回来)
    • @dtb,有什么困惑? digitcharint.Parsestring。因此:digit.ToString().
    • @Kirk:为什么要将某些内容转换为字符串,只是将其解析回另一种数据类型,而不是直接转换值? Char.GetNumericValue
    • @dtb,这是有充分理由的。我不知道char.GetNumericValue 存在。 ;) 谢谢你的提示! :)
    【解决方案3】:

    好吧,字符串是一个 IEnumerable 并且还实现了一个索引器,因此您可以遍历它或通过索引引用字符串中的每个字符。

    获得你想要的最快的方法可能是字符串的 ToCharArray() 方法:

    var myString = "12345";
    
    var charArray = myString.ToCharArray(); //{'1','2','3','4','5'}
    

    然后您可以将每个 Char 转换为字符串,或将它们解析为字节或整数。这是一种 Linq-y 方法:

    byte[] byteArray = myString.ToCharArray().Select(c=>byte.Parse(c.ToString())).ToArray();
    

    如果您使用 ASCII/Unicode 字符串,性能会更高:

    byte[] byteArray = myString.ToCharArray().Select(c=>(byte)c - 30).ToArray();
    

    只有当您确定每个元素都是数字时,该代码才有效;否则解析会抛出异常。一个简单的正则表达式可以验证这一点是“^\d+$”(匹配由一个或多个数字字符组成的完整字符串),用于 Regex.IsMatch() 静态方法。

    【讨论】:

      【解决方案4】:

      你可以这样做:

      "123456".Select(q => new string(q,1)).ToArray();
      

      要拥有可枚举的整数,根据评论请求,您可以:

      "123456".Select(q => int.Parse(new string(q,1))).ToArray();
      

      它有点弱,因为它假设字符串实际上包含数字。

      【讨论】:

      • 不返回 IEnumerable&lt;int&gt;(或等效项)。
      【解决方案5】:

      这里有一些代码可以帮助你。字符串可以被视为一个字符数组

      string numbers = "12345";
      int[] intArray = new int[numbers.Length];
      for (int i=0; i < numbers.Length; i++)
      {
         intArray[i] = int.Parse(numbers[i]);
      }
      

      【讨论】:

      • 倒数第二行出错。不要将[i] 包含在numbers 中。
      【解决方案6】:

      Substring 和 Join 方法可用于此语句。

      string no = "12345";
      string [] numberArray = new string[no.Length];
      int counter = 0;
      
         for (int i = 0; i < no.Length; i++)
         {
           numberArray[i] = no.Substring(counter, 1); // 1 is split length
           counter++;
         }
      
      Console.WriteLine(string.Join(" ", numberArray)); //output >>> 0 1 2 3 4 5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        相关资源
        最近更新 更多