我意识到这是一个经常重复的问题,但我已经读过其他20个问题而无法找到答案。
我试图解析一个文本文件,并在字符串不正确的第一行上获得异常。该文件位于Unity TextAsset
中,因此位于file.text
。此返回文件的内容为string
。
lines[0]
已正确读取到15
,第4行Debug.Log()
会返回2
,因此在拆分后不会留下额外的字符。
代码:
private void ReadFile()
{
string[] lines = Regex.Split(file.text, "\n|\r|\r\n");
Debug.Log(lines[0].Length);
int width = int.Parse(lines[0]);
int height = int.Parse(lines[1]);
tab = new int[width, height];
for (int i = 2; i < width+2; i++)
{
string[] values = Regex.Split(lines[i], "\t");
for (int j = 0; j < height; j++)
{
tab[i, j] = int.Parse(values[j]);
}
}
}
这是我试图解析的文件:
15
15
2 0 0 3 0 0 0 2 0 0 0 3 0 0 2
0 1 0 0 0 4 0 0 0 4 0 0 0 1 0
0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
0 4 0 0 1 0 0 0 0 0 1 0 0 0 0
0 0 3 0 0 4 0 0 0 4 0 0 0 4 0
0 0 0 0 0 0 3 0 3 0 0 0 3 0 0
2 0 0 3 0 0 0 1 0 0 0 3 0 0 2
0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
0 4 0 0 0 4 0 0 0 4 0 0 0 4 0
0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
0 1 0 0 0 4 0 0 0 4 0 0 0 1 0
2 0 0 0 0 0 0 2 0 0 0 0 0 0 2
#0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 1 - DW
# 2 - TW
# 3 - DL
# 4 - TL
这里显示的是带有空白字符的同一个文件:
我不知道如何粘贴这个,所以这只是Word的截图。
答案 0 :(得分:0)
您可以使用正则表达式确保字符串中不包含非数字..
List<List<int>> lines = File.ReadLines(filename)
.Select(line => Regex.Matches(line, @"\d+")
.Cast<Match>()
.Select(m => int.Parse(m.Value)).ToList())
.ToList();