Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串中读取坐标_C#_String_Find - Fatal编程技术网

C# 从字符串中读取坐标

C# 从字符串中读取坐标,c#,string,find,C#,String,Find,我想从如下字符串中读取坐标: string coordinate = "20, 10 10, 20"; int x1 = 20; int y1 = 10; int x2 = 10; int y2 = 20; 我想将每个数字存储在一个单独的整数变量中 实际上有什么数字并不重要。因此,除了“20,10,20”之外,可能还有任何东西。。。(“x1,y1 x2,y2”)由于fotmat没有明确指定,并且可能会出现一些不需要的值,如“x1,y1”,我建议使用正则表达式匹配有效点,例如 代码:

我想从如下字符串中读取坐标:

string coordinate = "20, 10   10, 20";

int x1 = 20;
int y1 = 10;
int x2 = 10;
int y2 = 20;
我想将每个数字存储在一个单独的整数变量中


实际上有什么数字并不重要。因此,除了
“20,10,20”
之外,可能还有任何东西。。。(
“x1,y1 x2,y2”

由于fotmat没有明确指定,并且可能会出现一些不需要的值,如
“x1,y1”
,我建议使用正则表达式匹配有效点,例如

代码:

  using System.Linq; 
  using System.Text.RegularExpressions;

  ....

  string coordinate = "20, 10   10, 20";

  Regex regex = new Regex(@"(?<x>-?[0-9]+),\s*(?<y>-?[0-9]+)");

  var points = regex
    .Matches(coordinate)
    .Cast<Match>()
     // I've put Point but you may want different class / struct
    .Select(match => new Point(int.Parse(match.Groups["x"].Value), 
                               int.Parse(match.Groups["y"].Value)))
    .ToArray(); // Let's materialize into an array

  // int x1 = points[0].X;
  // int y1 = points[0].Y;
  // int x2 = points[1].X;
  // int y2 = points[1].Y;

  Console.WriteLine(Environment.NewLine, points);
{X=20, Y=10}
{X=10, Y=20}

由于fotmat没有明确指定,并且可能会出现一些不需要的值,如
“x1,y1”
,因此我建议使用正则表达式来匹配有效点,例如

代码:

  using System.Linq; 
  using System.Text.RegularExpressions;

  ....

  string coordinate = "20, 10   10, 20";

  Regex regex = new Regex(@"(?<x>-?[0-9]+),\s*(?<y>-?[0-9]+)");

  var points = regex
    .Matches(coordinate)
    .Cast<Match>()
     // I've put Point but you may want different class / struct
    .Select(match => new Point(int.Parse(match.Groups["x"].Value), 
                               int.Parse(match.Groups["y"].Value)))
    .ToArray(); // Let's materialize into an array

  // int x1 = points[0].X;
  // int y1 = points[0].Y;
  // int x2 = points[1].X;
  // int y2 = points[1].Y;

  Console.WriteLine(Environment.NewLine, points);
{X=20, Y=10}
{X=10, Y=20}

您可以使用
split
功能:

string coordinate = "20, 10   10, 20";
var splitted = coordinate.Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)
                         .ToList();
var x1 = splitted[0];
var y1 = splitted[1];
var x2 = splitted[2];
var y2 = splitted[3];

您可以使用
split
功能:

string coordinate = "20, 10   10, 20";
var splitted = coordinate.Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)
                         .ToList();
var x1 = splitted[0];
var y1 = splitted[1];
var x2 = splitted[2];
var y2 = splitted[3];

\d+
将匹配字符串中的每个数字。或者也可以使用
-?\d+
匹配负值

string coordinate = "20, 10   10, 20";
var points = Regex.Matches(coordinate, @"\d+");
int x1 = int.Parse(points[0].Value);
int y1 = int.Parse(points[1].Value);
int x2 = int.Parse(points[2].Value);
int y2 = int.Parse(points[3].Value);

\d+
将匹配字符串中的每个数字。或者也可以使用
-?\d+
匹配负值

string coordinate = "20, 10   10, 20";
var points = Regex.Matches(coordinate, @"\d+");
int x1 = int.Parse(points[0].Value);
int y1 = int.Parse(points[1].Value);
int x2 = int.Parse(points[2].Value);
int y2 = int.Parse(points[3].Value);

要将字符串解析为int数组,我将使用LINQ:

string coordinates = "20, 10   10, 20";
var points = coordinates
                       .Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)
                       .Select(int.Parse)
                       .ToArray();
但您最好使用class/struct或匿名类来声明您的观点:

    var pointsStrings = coordinates.Split(new[] {"   "}, StringSplitOptions.RemoveEmptyEntries);
    var points = pointsStrings
        .Select(ps => ps.Split(new[] {", "}, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray())
        .Select(ps => new { X = ps[0], Y = ps[1]});

    foreach (var point in points)
    {
        Console.WriteLine($"X = {point.X}, Y = {point.Y}");
    }

要将字符串解析为int数组,我将使用LINQ:

string coordinates = "20, 10   10, 20";
var points = coordinates
                       .Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)
                       .Select(int.Parse)
                       .ToArray();
但您最好使用class/struct或匿名类来声明您的观点:

    var pointsStrings = coordinates.Split(new[] {"   "}, StringSplitOptions.RemoveEmptyEntries);
    var points = pointsStrings
        .Select(ps => ps.Split(new[] {", "}, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray())
        .Select(ps => new { X = ps[0], Y = ps[1]});

    foreach (var point in points)
    {
        Console.WriteLine($"X = {point.X}, Y = {point.Y}");
    }

坐标集之间总是有三个空格吗?如果结果类似于
“john,paul george,ringo”
,您打算如何将结果分配给int?您对字符串的格式有多大的控制权?永远不会有这样的名称或sm。只有数字。是的,第一个和第二个坐标之间总是有3个空格。你关心逗号后面是否有空格吗?我已经解决了这个问题。Thx无论如何…坐标集之间总是有3个空格吗?如果结果类似于
“john,paul george,ringo”
,您打算如何将结果分配给int?您对字符串的格式有多大的控制权?永远不会有这样的名称或sm。只有数字。是的,在第一个坐标和第二个坐标之间总是有3个空格。你在乎逗号后面是否有空格吗?我已经解决了这个问题。无论如何,Thx…而不是
where
子句,你可以使用
Split(new[]{',',},StringSplitOptions.removemptyentries)
@RobinBennett非常感谢您的精彩评论!代码变得更干净、更清晰、更短!谢谢您可以使用
Split(new[]{',','},StringSplitOptions.removeMptyEntries)代替
where
子句
@RobinBennett非常感谢您的宝贵意见!代码变得更干净、更清晰、更短!谢谢