如何用C#从无空格字符的文本文件生成二维字符串数组?
解决方案
你的核心问题是错误地用空格拆分连续字符,而且代码里的int.Parse既不符合你要string数组的需求,还会因为内容包含字母报错。以下是修正后的实现:
修正后的代码
// 直接读取文件的所有行,自动处理换行符 string[] lines = File.ReadAllLines(@"c:\myfile.txt"); // 确认N的大小(假设所有行长度一致,取第一行的长度) int n = lines[0].Trim().Length; string[,] result = new string[n, n]; for (int i = 0; i < lines.Length; i++) { // 清理行首尾的空白(比如多余的换行符、空格) string currentLine = lines[i].Trim(); // 遍历该行的每个字符,存入二维数组 for (int j = 0; j < currentLine.Length; j++) { result[i, j] = currentLine[j].ToString(); } }
原代码的问题分析
- 拆分逻辑错误:你用
Split(' ')拆分每行,但文件里的字符是连续无空格的,这会导致每行只会得到一个完整的字符串,无法拆分出单个字符。 - 类型转换错误:你试图用
int.Parse转换内容,但第二行包含a、b、c、d等字母,会直接抛出格式异常,而且你的需求是存储string类型,不需要转int。 - 读取方式不够严谨:
File.ReadAllText读取后用\n拆分,可能会保留\r等多余字符,File.ReadAllLines会自动处理不同系统的换行符,更可靠。
额外提示
如果你的需求只是独立操作每个字符,使用char[,]类型的二维数组会更高效,不需要把每个字符转成string,代码可以简化为:
string[] lines = File.ReadAllLines(@"c:\myfile.txt"); int n = lines[0].Trim().Length; char[,] charResult = new char[n, n]; for (int i = 0; i < lines.Length; i++) { string currentLine = lines[i].Trim(); for (int j = 0; j < currentLine.Length; j++) { charResult[i, j] = currentLine[j]; } }
内容的提问来源于stack exchange,提问作者sammyrkhan
相关产品推荐
相关产品推荐

