Unity中使用Split("\n")读取TextMeshPro InputField单行文本失败求助
Unity中TextMeshPro InputField与TXT文件内容对比问题解决
问题核心
你用lines = textField.text.Split("\n");无法拆分输入框文本,本质是TextMeshPro InputField默认输入不会自动生成换行符,除非用户手动按回车,所以Split("\n")自然拿不到单行内容。
解决方案
1. 正确拆分输入框文本(按行对比场景)
如果你的TXT文件按行存储内容,且需要InputField按行匹配,先在Inspector里勾选InputField的Multi Line选项,允许用户输入时换行。之后拆分文本要兼容不同平台的换行符(Windows是\r\n,Linux/macOS是\n),代码改成:
// 兼容多平台换行符的拆分逻辑 string[] inputLines = textField.text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
如果不需要用户手动换行,只是要把输入框的完整内容和TXT的某一行对比,直接用textField.text和TXT行内容做判断即可,无需拆分。
2. 优化对比代码
你当前的嵌套循环效率较低(时间复杂度O(n*m)),可以用HashSet优化查找速度,逻辑更简洁:
// 将原始文件内容转为HashSet,提升查找效率 HashSet<string> originalFileSet = new HashSet<string>(ReadTXT.readTXT.originalFile); // 倒序遍历originalData(和你原代码逻辑一致) for (int j = originalData.Count - 1; j >= 0; j--) { string targetData = originalData[j]; if (originalFileSet.Contains(targetData)) { Debug.Log($"原始文件内容:{targetData} | 待匹配内容:{targetData}"); } }
额外场景处理
若要对比输入框完整文本和整个TXT文件内容,直接读取TXT完整文本后做字符串相等判断:
string txtFullContent = File.ReadAllText("你的TXT文件路径"); // 可选忽略大小写匹配 if (txtFullContent.Equals(textField.text, StringComparison.OrdinalIgnoreCase)) { Debug.Log("内容完全匹配"); }
内容的提问来源于stack exchange,提问作者aesoftware
相关产品推荐
相关产品推荐

