将字符串编号转换为数字序列 - .Net 2.0

时间:2010-03-13 08:57:18

标签: c#

给定一个字符串

string result = "01234"

我想从字符串中获取单独的整数0,1,2,3,4。

怎么做?

1

以下代码为我提供了 ascii值

List<int> ints = new List<int>();

    foreach (char c in result.ToCharArray())
    {
        ints.Add(Convert.ToInt32(c));
    }

8 个答案:

答案 0 :(得分:4)

编辑:我没有发现“.NET 2.0”的要求。如果你要做很多这类事情,可能值得使用LINQBridge,并看看后面的内容 - 特别是如果你仍然可以使用C#3.0,同时仍然针对2.0。否则:

List<int> integers = new List<int>(text.Length);
foreach (char c in text)
{
    integers.Add(c - '0');
}

不是很整洁,但它会起作用。可替换地:

List<char> chars = new List<char>(text);
List<int> integers = chars.ConvertAll(delegate(char c) { return c - '0'; });

或者如果你对数组感到满意:

char[] chars = text.ToCharArray();
int[] integers = Arrays.ConvertAll<char, int>(chars, 
                            delegate(char c) { return c - '0'; });

原始回答

其他人建议使用ToCharArray。您不需要这样做 - 字符串已经实现IEnumerable<char>,因此您已经可以将其视为一系列字符。然后,您只需将每个字符数字转换为整数表示;最简单的方法是减去字符'0'的Unicode值:

IEnumerable<int> digits = text.Select(x => x - '0');

如果您想在List<int>中使用此功能,请执行以下操作:

List<int> digits = text.Select(x => x - '0').ToList();

答案 1 :(得分:3)

您可以使用LINQ:

var ints = result.Select(c => Int32.Parse(c.ToString()));

修改 不使用LINQ,你的循环似乎足够好。只需使用Int32.Parse而不是Convert.ToInt32:

List<int> ints = new List<int>();

foreach (char c in result.ToCharArray())
{
    ints.Add(Int32.Parse(c.ToString()));
}

答案 2 :(得分:3)

循环字符并将每个字符转换为数字。你可以将它们放在一个数组中:

int[] digits = result.Select(c => c - '0').ToArray();

或者你可以直接遍历它们:

foreach (int digit in result.Select(c => c - '0')) {
   ...
}

编辑:
当您澄清使用框架2.0时,可以在循环中应用相同的计算:

List<int> ints = new List<int>(result.Length);

foreach (char c in result) {
    ints.Add(c - '0');
}

注意:在创建列表时指定容量,这消除了列表调整自身大小的需要。您不需要使用ToCharArray来循环字符串中的字符。

答案 3 :(得分:2)

string result = "01234";
List<int> list = new List<int>();
foreach (var item in result)
{
    list.Add(item - '0');
}

答案 4 :(得分:1)

索引到字符串中以提取每个字符。将每个字符转换为数字。代码留给读者练习。

答案 5 :(得分:1)

另一种解决方案......

string numbers = "012345";
List<int> list = new List<int>();

foreach (char c in numbers)
{
    list.Add(int.Parse(c.ToString()));
}

不需要从字符串中执行char数组,因为字符串可以像数组一样枚举。

此外,ToString()会将其设为字符串,因此int.Parse会为您提供数字,而不是转换char时获得的ASCII值。

答案 6 :(得分:0)

        List<int> ints = new List<int>();

        foreach (char c in result.ToCharArray())
        {
            ints.Add(Convert.ToInt32(c));
        }

答案 7 :(得分:0)

    static int[] ParseInts(string s) {
        int[] ret = new int[s.Length];
        for (int i = 0; i < s.Length; i++) {
            if (!int.TryParse(s[i].ToString(), out ret[i]))
                throw new InvalidCastException(String.Format("Cannot parse '{0}' as int (char {1} of {2}).", s[i], i, s.Length));
        }
        return ret;
    }