【问题标题】:Get number inside of a string and do a loop获取字符串中的数字并执行循环
【发布时间】:2014-03-06 12:55:48
【问题描述】:

我想得到一个字符串的数字,并将字符串和数字分开,然后,做一个循环并调用一个方法,字符串说的次数。 字符串必须有这样的结构:“ABJ3”(只接受一个数字,前面有 3 个字符)

这是我的代码,但它重复了数百次,我不知道为什么

            int veces = 0;
            for (int i = 0; i < m.Length; i++)
            {
                if (Char.IsDigit(m[i]))
                    veces = Convert.ToInt32(m[i]);
            }

            if (m.Length == 4)
            {
                for (int i = 0; i <= veces; i++)
                {
                    m = m.Substring(0, 3);
                    operaciones(m, u, t);
                    Thread.Sleep(100);
                }
            }
            operaciones(m,u,t);
            if (u.Length >= 14)
            {
                u = u.Substring(0, 15);
            }

请帮忙?

【问题讨论】:

    标签: c# string numbers


    【解决方案1】:

    您现在必须将您的 m[i] ToString() 转换为将 char 值发送到 Convert.ToInt32,这是一个更高的值(例如 9 = 57)

    char t = '9';
    
    int te = Convert.ToInt32(t.ToString());
    
    Console.WriteLine(te);
    

    这给了我们一个 9 但是的结果

    char t = '9';
    
    int te = Convert.ToInt32(t);
    
    Console.WriteLine(te);
    

    给我们一个 57 的结果

    所以你需要改变

    veces = Convert.ToInt32(m[i]);
    

    veces = Convert.ToInt32(m[i].ToString());
    

    希望对您有所帮助。

    最好的问候//KH。

    【讨论】:

    • 是的,它有效,但它返回 veces + 2 次感谢您的快速回复
    【解决方案2】:

    您不能像这样转换数字。您正在覆盖它们并仅采用最后一个。此外,您使用的是 ASCII 码,而不是数字值。您必须先提取所有数字然后转换它们:

    int position = 0;
    int veces = 0;
    string temp = ""
    for (int i = 0; i < m.Length; i++) {
      if (Char.IsDigit(m[i]))
        position = i;
      else
        break;
    }
    veces = Convert.ToInt32(m.SubString(0, i + 1));
    

    或者,您可以使用正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多