如何从Assets文件夹读取多段落文本并存入String数组?
嘿,这个需求在处理文本内容时挺常见的,尤其是Unity项目里(毕竟你提到了Assets文件夹)。我来给你详细讲两种场景下的实现方式:
Unity项目场景
步骤1:准备你的文本文件
确保你的文本文件里,每个段落是用连续的空行分隔的(比如第一段结束后敲两次回车再写第二段),这样我们才能准确分割段落。把文件放到Assets目录下,比如直接放在根目录或者Resources文件夹里。
步骤2:编写加载代码
我们可以用Unity的TextAsset来快速读取Assets里的文本文件,然后按空行分割成段落数组:
using UnityEngine; public class ParagraphReader : MonoBehaviour { // 在Inspector面板里直接拖入你的文本文件 public TextAsset targetTextFile; void Start() { if (targetTextFile == null) { Debug.LogError("别忘了给脚本指定要加载的文本文件哦!"); return; } // 处理不同系统的换行符(Windows是\r\n,Linux/macOS是\n) string[] paragraphSeparators = new[] { "\n\n", "\r\n\r\n" }; // 分割段落,同时移除空字符串(避免文件首尾的空行干扰) string[] paragraphs = targetTextFile.text.Split(paragraphSeparators, System.StringSplitOptions.RemoveEmptyEntries); // 验证结果(可以根据需求替换成自己的逻辑) for (int i = 0; i < paragraphs.Length; i++) { Debug.Log($"第{i+1}个段落:\n{paragraphs[i]}"); } } }
额外提示
如果你的文本文件特别大,建议把它放到StreamingAssets文件夹,用UnityWebRequest异步加载,避免阻塞主线程:
using UnityEngine; using UnityEngine.Networking; using System.Collections; public class LargeParagraphReader : MonoBehaviour { public string fileName = "yourLargeText.txt"; IEnumerator Start() { string filePath = Path.Combine(Application.streamingAssetsPath, fileName); using (UnityWebRequest request = UnityWebRequest.Get(filePath)) { yield return request.SendWebRequest(); if (request.result != UnityWebRequest.Result.Success) { Debug.LogError(request.error); yield break; } string[] paragraphs = request.downloadHandler.text.Split(new[] { "\n\n", "\r\n\r\n" }, System.StringSplitOptions.RemoveEmptyEntries); // 后续处理段落数组 } } }
普通.NET项目场景
如果是普通C#项目,Assets只是一个普通目录,直接用File类读取即可:
using System; using System.IO; class Program { static void Main(string[] args) { string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets", "yourTextFile.txt"); if (!File.Exists(filePath)) { Console.WriteLine("找不到指定的文本文件!"); return; } string fileContent = File.ReadAllText(filePath); string[] paragraphs = fileContent.Split(new[] { "\n\n", "\r\n\r\n" }, System.StringSplitOptions.RemoveEmptyEntries); foreach (var para in paragraphs) { Console.WriteLine($"段落内容:\n{para}\n---"); } } }
关键注意点
- 一定要确认段落的分隔符:如果你的文本不是用空行分隔,而是用其他标记(比如
---),只要把Split方法里的分隔符换成对应的字符串即可。 - 处理换行符兼容性:不同操作系统的换行符不一样,所以同时加入
\n\n和\r\n\r\n作为分隔符,保证跨平台正常工作。
内容的提问来源于stack exchange,提问作者user9308577
相关产品推荐
相关产品推荐

