求助:Unity中Split读TXT、TMPro_InputField读取后无法获取数组全量元素
Unity中TMPro_InputField数据读取与文本比对问题排查与修复
一、文本读取代码的问题及修复
原读取代码存在几个关键问题,直接导致后续比对失效:
- 换行符兼容问题:不同系统换行符可能是
\r\n(Windows)或\n(Linux/macOS),仅用Split("\n")分割会让部分字符串末尾残留\r,比对时因字符不匹配失败。 - List初始化逻辑错误:仅当
dataLines.Count>0时才新建List,若dataLines初始为null会触发空引用异常。 - 空行与空白字符处理缺失:
Split("\n")后的元素不会是"\n",原判断无效;且未对行内容做Trim处理,残留的空格、换行符会干扰比对。
修复后的ReadFile方法:
public void ReadFile() { // 初始化或清空List,避免空引用 if (dataLines == null) dataLines = new List<string>(); else dataLines.Clear(); // 按所有换行符分割,兼容不同操作系统 rawDataLines = FileManager.fileManagerInstance.mainFile.text.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); foreach(string line in rawDataLines) { // 去除首尾空白字符后再判断条件 var trimmedLine = line.Trim(); if (trimmedLine.Contains(",") && !trimmedLine.Contains("#") && !dataLines.Contains(trimmedLine)) { dataLines.Add(trimmedLine); } } }
二、InputField比对代码的优化
原比对逻辑的问题:
- 未处理InputField文本的换行符兼容,分割后的元素与文本文件行内容不匹配。
- 直接将匹配元素设为空字符串,而非移除,会留下无效空元素影响后续处理。
修复后的比对逻辑:
// 处理InputField文本,兼容换行符并分割 var inputLines = inputData.text.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries) .Select(line => line.Trim()) .ToList(); // 移除与文本文件中匹配的元素 inputLines.RemoveAll(line => CheckFile.checkFileInstance.dataLines.Contains(line)); // 转成数组(如果需要数组形式) arrayConvertedData = inputLines.ToArray();
三、额外排查建议
- 确认
FileManager.fileManagerInstance.mainFile是正确加载的TextAsset,或文件路径无误,避免读取空内容。 - 调试时用
Debug.Log($"Line内容: '{line}'")打印元素,直观查看是否有\r等隐藏字符导致匹配失败。
内容的提问来源于stack exchange,提问作者aesoftware
相关产品推荐
相关产品推荐

