2017-04-16 19 views
1

私はC#(unity3d)を使用しています。C#最後の行を文字列で取り除く

私は\r\nで区切られた行を含む文字列を持っており、最後の行を削除する必要があります。 z 私は何か作業をすることができましたが、それは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

あなたは、単に行うことでこれを実現することができます

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" 

最終 - あなたが持っていると新しいのオプションが代わりに"\r\n"


Environment.NewLineを使用するserge.karalenka提案@見ますあなたがする必要があります:

var trimmed = text.Substring(0, lastPosition == -1 ? text.Length : 
        text.LastIndexOf(Environment.NewLine, lastPosition - 1)); 
+0

これは、「例外ArgumentOutOfRangeExceptionを負にすることはできません。」私を与えています – FLX

+0

@FLXどちらですか? –

+0

第2のもの。あなたは正しいです。常に空の行があります。 – FLX

0

あなたの3行目の2行目の結果(単に "\ r \ n"を追加する)。

また、 "\ r \ n"の代わりにEnvironment.NewLineを使用すると、コードがクロスプラットフォームになります。 だから一行は、あなたの仕事のために十分でしょう。

var trimmed = text.Substring(0, text.LastIndexOf(Environment.NewLine)); 
関連する問題