C#删除字符串中的最后一行

时间:2017-04-16 16:22:28

标签: c# unity3d

我正在使用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);

这种效率是否足以经常使用,随着时间的推移,文本字符串会不断增长? 这适用于类似控制台的系统。

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));