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非常感谢您的宝贵意见!代码变得更干净、更清晰、更短!谢谢