C# list<string> 怎么提取需要的内容并存入其他...12
发布网友
发布时间:2024-03-21 21:10
我来回答
共5个回答
热心网友
时间:2024-03-24 22:16
用正则表达式来实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication2
{
class Program
{
//定义一个结构存放X,Y坐标
struct MyPoint
{
public float x;
public float y;
public override string ToString()
{
return string.Format("x={0}, y={1}", x, y);
}
}
static void Main(string[] args)
{
//存放提取出的坐标点
List<MyPoint> pointList = new List<MyPoint>();
List<string> list = new List<string>() {
"X100.013 Y111.084 Z1.07050",
"X100.049 Y110.931 Z1.07569",
"X100.191 Y110.652 Z1.08603",
"X100.412 Y110.431 Z1.09638",
"X100.691 Y110.289 Z1.10673",
"X100.844 Y110.253 Z1.11192",
"X101.008 Y110.240 Z1.11737"
};
//匹配模式串
string pattern = @"X(?<x>\d+.\d+) Y(?<y>\d+.\d+) Z\d+.\d+";
foreach (string s in list)
{
Match match = Regex.Match(s, pattern);
if (match.Success)
{
//从配合结果中取出x,y,并转换成浮点数
float xV = float.Parse(match.Result("${x}"));
float yV = float.Parse(match.Result("${y}"));
//存放到集合中
pointList.Add(new MyPoint() { x = xV, y = yV });
}
}
// 结果数组
MyPoint[] points = pointList.ToArray();
// 显示提前结果
for (int i = 0; i < points.Length; i++)
{
Console.WriteLine(points[i].ToString());
}
}
}
}
热心网友
时间:2024-03-24 22:12
你这些里的这些数字那么整齐还能不好存么,用一个for循环或者foeach循环,把这些数据全部遍历一遍,因为你这些数字过于整齐了,所以你完全可以拿出一项之后 s[i].substring(1,7),这样就拿出x了,同样s[i].substring(10,7)就拿出y了,因为你拿出来是string,记得再Convet.Double一下,就行了,拿出来的坐标你可以去定义一个二维数组都给放进去就行了。
热心网友
时间:2024-03-24 22:17
我也来凑凑热闹,试著用Linq,感觉不错哦
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqTest1
{
struct DoublePoint
{
private double x;
private double y;
public DoublePoint(double[] a)
{
this.x = a[0];
this.y = a[1];
}
public double X
{
get { return this.x; }
set { this.x = value; }
}
public double Y
{
get { return this.y; }
set { this.y = value; }
}
}
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>() { "X100.013 Y111.084 Z1.07050",
"X100.049 Y110.931 Z1.07569",
"X100.191 Y110.652 Z1.08603",
"X100.412 Y110.431 Z1.09638",
"X100.691 Y110.289 Z1.10673",
"X100.844 Y110.253 Z1.11192",
"X101.008 Y110.240 Z1.11737"};
var a = from item in list select new DoublePoint(Array.ConvertAll(item.Replace("X", "").Replace("Y", "").Substring(0, item.IndexOf(" Z") - 2).Split(' '), Double.Parse));
DoublePoint[] value = a.ToArray();
}
}
}
热心网友
时间:2024-03-24 22:18
float[] getzXYZ(string t)
{
if (t.IndexOf("X")<0 ||t.IndexOf("Y")<0||t.IndexOf("Z")<0)
{
return null;
}
string sx = t.Substring(t.IndexOf("X"), t.IndexOf("Y") - t.IndexOf("X")).Substring(1);
string sy = t.Substring(t.IndexOf("Y"), t.IndexOf("Z") - t.IndexOf("Y")).Substring(1);
string sz = t.Substring(t.IndexOf("Z")).Substring(1);
float x = float.Parse(sx);
float y = float.Parse(sy);
float z = float.Parse(sz);
float[] rtn=new float[3];
rtn[0]=x;
rtn[1]=y;
rtn[2]=z;
return rtn;
}
//自己迭代
热心网友
时间:2024-03-24 22:12
List<double[]> list=new List<double[]>();
foreach(string str in s)
{
string[] arr=str.Split(new char[]{' '},StringSplitOption.RemoveEmptyEntries);
if(arr.Length>=2)
{
doube x=Convert.ToDouble(arr[0].Trim('X'));
doube y=Convert.ToDouble(arr[1].Trim('Y'));
list.Add(new double[]{x,y});
}
}
//list就是你要的结果了