我为这个问题尝试了很多可能的解决方案,但它似乎永远不会起作用。我的问题如下:我有一个包含多行的txt文件。每行都有类似的内容:
xxxxx yyyyyy
xxxxx yyyyyy
xxxxx yyyyyy
xxxxx yyyyyy
...
我希望将xxxxx
和另一个数组yyyyy
存储在一个字符串数组中,对于txt文件中的每一行,类似
string[] x;
string[] y;
string[1] x = xxxxx; // the x from the first line of the txt
string[2] x = xxxxx; // the x from the second line of the txt
string[3] x = xxxxx; // the x from the third line of the txt
...
和string[] y
相同;
......但我不知道如何......
如果有人告诉我如何为这个问题制定循环,我将非常感激。
答案 0 :(得分:3)
您可以使用linq:
string test = "xxxxx yyyyyy xxxxx yyyyyy xxxxx yyyyyy xxxxx yyyyyy";
string[] testarray = test.Split(' ');
string[] arrayx= testarray.Where((c, i) => i % 2 == 0).ToArray<string>();
string[] arrayy = testarray.Where((c, i) => i % 2 != 0).ToArray<string>();
基本上,这段代码用空格分割字符串,然后将偶数字符串放在一个数组中,将奇数字符串放在另一个数组中。
修改强>
你在评论中说你不理解这一点:Where((c, i) => i % 2 == 0).
它的作用是取每个字符串的位置(i)并用2做一个mod。这意味着它将位置除以2并检查剩余是否等于0.这是一个数字奇数或偶数的方法。
<强> EDIT2 强>
我的第一个答案仅适用于一行。对于几个(因为您的输入源是一个包含多行的文件),您需要进行foreach
循环。或者您可以执行类似下一个示例代码的操作:读取所有行,将它们连接到单个字符串中,然后在结果上运行显式代码:
string[] file=File.ReadAllLines(@"yourfile.txt");
string allLines = string.Join(" ", file); //this joins all the lines into one
//Alternate way of joining the lines
//string allLines=file.Aggregate((i, j) => i + " " + j);
string[] testarray = allLines.Split(' ');
string[] arrayx= testarray.Where((c, i) => i % 2 == 0).ToArray<string>();
string[] arrayy = testarray.Where((c, i) => i % 2 != 0).ToArray<string>();
答案 1 :(得分:0)
如果我理解你的问题,xxxxx和yyyyyy会重复出现,以防万一这样的话11111 222222 11111 222222 11111 222222 它们之间有一个空间,所以
1. you may split the line one by one within a loop
2. use ' ' as delimiter when split the line
3. use a counter to differentiate whether the string is odd or even and store them separately within another loop
答案 2 :(得分:0)
如果我理解正确,你有多行,每行有两个字符串。然后,这是一个使用普通旧的答案:
public static void Main()
{
// This is just an example. In your case you would read the text from a file
const string text = @"x y
xx yy
xxx yyy";
var lines = text.Split(new[]{'\n', '\r'}, StringSplitOptions.RemoveEmptyEntries);
var xs = new string[lines.Length];
var ys = new string[lines.Length];
for(int i = 0; i < lines.Length; i++)
{
var parts = lines[i].Split(' ');
xs[i] = parts[0];
ys[i] = parts[1];
}
}