如何从用户提供的字符串中解析整数

时间:2011-06-23 12:45:10

标签: c# string parsing

我有一个规范,用户需要键入一对坐标字符串,如:

{{2,3}, {9,0}}

这些是二维轴上线的坐标。

我想在运行期间动态地在 C#中解析此用户输入字符串,并在二维数组中输入这些坐标。我知道我们可以做硬编码:

int[,] CoOrdinates = {{2,3}, {9,0}};

但我不知道如何让用户输入字符串并从字符串中获取坐标以动态存储在数组中。

我正在使用Console.Readline();让用户输入坐标。

请帮助,谢谢!

4 个答案:

答案 0 :(得分:1)

我会在C#中使用正则表达式(Regex类)来解析所需字符串的位,然后Int32.TryParse()将字符串转换为数字。 This是构建正则表达式的好资源,this是我首选的正则表达式测试程序。祝你好运。

答案 1 :(得分:0)

            string s = "{{2,3}, {9,0}}";
            string p = "{(?<x>\\d),(?<y>\\d)}";
            Regex regex = new Regex(p);
            MatchCollection ms = regex.Matches(s);
            int[,] cood = new int[ms.Count, ms.Count];
            int i =0;
            foreach (Match m in ms)
            {
                cood[i,0] = int.Parse(m.Groups["x"].Value);
                cood[i, 1] = int.Parse(m.Groups["y"].Value);
                i++;
            }

如果预期坐标中的值错误,则可以使用TryParse

答案 2 :(得分:0)

快速回答:

    public void IntegerReader()
    {
        string integers = Console.ReadLine();

        string[] split = integers.Split(',');

        int result;

        foreach (string s in split)
        {
            if (!string.IsNullOrEmpty(s.Trim()))
                if (int.TryParse(s.Trim(), out result))
                    Console.WriteLine(result);
        }
    }

答案 3 :(得分:0)

这不是超级优雅,但我认为结果是你所期望的

string coords = "{{2,3}, {9,0}}";
string matchPattern = @"\{\{(?<x1>\d{1})\,(?<y1>\d{1})\}\,\s*\{(?<x2>\d{1})\,(?<y2>\d{1})\}\}";

var matches = Regex.Match(coords, matchPattern);

int[,] values = new int[2,2];

int.TryParse(matches.Groups["x1"].ToString(), out values[0,0]);
int.TryParse(matches.Groups["y1"].ToString(), out values[0,1]);

int.TryParse(matches.Groups["x2"].ToString(), out values[1,0]);
int.TryParse(matches.Groups["y2"].ToString(), out values[1,1]);

/* Result:
 *    0  1
 *   -----
 * 0| 2  3
 * 1| 9  0
 */

当然,在将值分配给矩形数组之前,您需要检查是否返回了四个组,但这应该很容易实现。