我正在使用C#(unity3d)。
我有一个字符串,其中包含以\r\n
分隔的行,我需要删除最后一行。
ž
我设法做了一些工作,但它需要3行,我觉得C#中可能会有更短的东西。
这是我目前的代码:
int index = infoTxt.text.LastIndexOf("\r\n");
infoTxt.text = infoTxt.text.Substring(0, index - 2);
infoTxt.text = infoTxt.text.Substring(0, infoTxt.text.LastIndexOf("\r\n")+2);
这种效率是否足以经常使用,随着时间的推移,文本字符串会不断增长? 这适用于类似控制台的系统。
答案 0 :(得分:1)
您只需执行以下操作即可实现此目的:
var trimmed = text.Substring(0, text.LastIndexOf("\r\n"));
经过测试:
var text = File.ReadAllText("data.txt"); // "row1\r\nrow2\r\nrow3"
var trimmed = text.Substring(0, text.LastIndexOf("\r\n")); // "row1\r\nrow2"
您的双子字符串表示您的数据以空行结束。如果是这样,那么您需要second last index:
string value = "\r\n";
var text = File.ReadAllText("data.txt"); //"row1\r\nrow2\r\nrow3\r\n"
int lastPosition = text.LastIndexOf(value);
var trimmed = text.Substring(0, text.LastIndexOf(value, lastPosition-1)); // "row1\r\nrow2"
最后 - 请参阅@ serge.karalenka建议,使用 Environment.NewLine
代替"\r\n"
如果您有没有新行的选项,那么您应该:
var trimmed = text.Substring(0, lastPosition == -1 ? text.Length :
text.LastIndexOf(Environment.NewLine, lastPosition - 1));
答案 1 :(得分:0)
用第3行覆盖第2行的结果(只需在其中添加“\ r \ n”)。
此外,您可以使用Environment.NewLine而不是“\ r \ n”,因此您的代码将是跨平台的。 因此,只需一行即可满足您的任务:
var trimmed = text.Substring(0, text.LastIndexOf(Environment.NewLine));