所以我有一個服務器接收與被轉換為字串的訊息的連接,然后我將這個字串由空格(“”)分割成一個字串引數陣列。在我的一個 if 陳述句中,我嘗試使用如下所示的代碼洗掉字串中的第一個單詞:
string[] arguments = line.Split(' ');
string dataUpdate = line.Replace(args[0], "");
User.data = dataUpdate;
這不會洗掉,但會替換我不想要的字串的第一部分。但是,因為我用“”(中間的一個空格)將它們分開,所以它在開頭留下了一個空格,我正試圖擺脫第一個空格。我該怎么做?還有我可以做的另一種或更簡單的方法嗎?
謝謝!
uj5u.com熱心網友回復:
所以你有一條線:
var line = "hello world my name is bob";
而且你不想要“世界”或“是”,所以你想要:
"hello my name bob"
如果您拆分為一個串列,洗掉您不想要的東西并重新組合成一行,您將不會有多余的空格:
var list = line.Split().ToList();
list.Remove("world");
list.Remove("is");
var result = string.Join(" ", list);
或者,如果您知道串列項的確切索引位置,則可以使用RemoveAt,但按從最高索引到最低索引的順序洗掉它們,因為如果您想洗掉 1 和 4,首先洗掉 1 將意味著您想要的 4 remove 現在在索引 3 中。示例:
var list = line.Split().ToList();
list.RemoveAt(4); //is
list.RemoveAt(1); //world
var result = string.Join(" ", list);
如果您正在尋找類似于 string.Replace 的行為,它會洗掉所有出現的事件,您可以使用 RemoveAll:
var line = "hello is world is my is name is bob";
var list = line.Split().ToList();
list.RemoveAll(w => w == "is"); //every occurence of "is"
var result = string.Join(" ", list);
uj5u.com熱心網友回復:
您可以使用 TrimStart() 方法洗掉空白空間。像這樣的東西:
string text = "Hello World";
string[] textSplited = text.Split(' ');
string result = text.Replace(textSplited[0], "").TrimStart();
uj5u.com熱心網友回復:
假設您只想洗掉第一個單詞而不是所有重復的單詞,更有效的方法是使用split 的多載,它可以讓您控制最大拆分數(引數是最大結果數,即比最大分割數多一):
string[] arguments = line.Split(new[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries); // split only once
User.data = arguments.Skip(1).FirstOrDefault();
arguments[1]當有“更多”引數時做正確的事情,但IndexOutOfRangeException如果單詞數為零或一則拋出。這可以在沒有 LINQ 的情況下通過(arguments.Length > 1)? arguments[1]: string.Empty
uj5u.com熱心網友回復:
如果您只是洗掉字串的第一個單詞,則根本不需要使用 Split;找到空間后做一個 Substring 會更有效率。
var line = ...
var idx = line.IndexOf(' ') 1;
line = line.Substring(idx);
或在最近的 C# 版本中
line = line[idx..];
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/425106.html
下一篇:在java中的陣列中列印最大數量
