我在从文本文件解析下面的示例时遇到问题。我试图做的是读取整个文本文件,然后将文件拆分,这样每个数字都是一个单独的元素。
所以它是这样的:
[466 474 482]
[24 8 29]
[50 46 3]
到此
[466],[474],[482],[24,[8],[29],[50],[46],[3]
我的计划是使用ReadAllLines读取文本,然后使用Split方法单独拆分数字
string[] textFile = File.ReadAllLines(@"path");
string[] textFile2 = { };
for (int i = 0; i < textFile.Length; i++)
{
textFile2 = textFile[i].Split(' ');
}
foreach (string number in textFile2)
{
Console.Write(number + " ");
}
但我最终得到了这[50] [46] [3]。
答案 0 :(得分:2)
您正在为您阅读的每一行替换textFile2
个内容。请尝试使用List<string>
。
string[] textFile = File.ReadAllLines(@"path");
List<string> textFile2 = new List<string>();
for (int i = 0; i < textFile.Length; i++)
{
textFile2.AddRange(textFile[i].Split(' '));
}
foreach (string number in textFile2)
{
Console.Write(number + " ");
}
如果您的文件看起来真的如此,使用方括号和空行,这可能会对您有所帮助:https://dotnetfiddle.net/fzBU4W
答案 1 :(得分:0)
我更喜欢使用正则表达式。
确保在代码顶部调用Regex名称空间:
using System.Text.RegularExpressions;
将正则表达式实例定义为静态字段 - 如果您以高频率使用它,这是个好主意。
public static Regex extractNumberRegex = new Regex("([\\d]+)[\\s]?");
下面的示例定义了静态类中的扩展方法。 首先,让我们从字符串中提取数字。
public static List<String> extractNumbers(this String source)
{
List<String> output = new List<string>();
MatchCollection mchCol = extractNumberRegex.Matches(source);
foreach (Match mch in mchCol)
{
output.Add(mch.Value);
}
return output;
}
您的主要方法(此处也是扩展名):
public static List<String> extract(this String path)
{
String[] lines = File.ReadAllLines(path);
foreach (String ln in lines)
{
List<String> numers = ln.extractNumbers();
String reformatLine = "";
foreach (String num in numers)
{
reformatLine = reformatLine + "[" + num + "] ";
}
reformatLine = reformatLine.Trim();
Console.WriteLine(reformatLine);
}
}
答案 2 :(得分:0)
您可以连接输入数组,然后按char分割。
string[] textFile = File.ReadAllLines(@"path");
string concatInput = String.Join(" ", textFile);
string[] textFile2 = concatInput.Split(' ');
foreach (string number in textFile2)
{
Console.Write(number + " ");
}
如果你想删除括号[],你可以做这样的事情......
string concatInput = String.Join(" ", textFile).Replace('[', ' ').Replace(']', ' ');
string[] textFile2 = concatInput.Split(' ').Where(x => x != "").ToArray();