此代碼應在不知道字串資料包含哪些字符的情況下從字串資料變數中洗掉每三個字符和最后一個字符。
問題是,如果String Data的長度為3個字符,這段代碼運行良好,但如果更多,那么要洗掉的字符將不會被洗掉。
如果我替換x == Data.Length為x == 3,那么如果我在 String Data 變數中運行超過三個字符的代碼,則會出現運行時錯誤。
int x = 0;
for (int i = 0; i < Data.Length; i )
{
x ;
if (x == Data.Length - i) //3
{
Data = Data.Remove(i, i - 1);
Data = Data.Remove(Data.Length - 1);
x = 0;
}
}
uj5u.com熱心網友回復:
您可以將所需的字符累積到一個 StringBuilder 中,然后砍掉最后一個:
string datum = "123456789";
var sb = new System.Text.StringBuilder();
for (int i = 0; i < datum.Length; i )
{
if (i % 3 != 2)
{
sb.Append(datum[i]);
}
}
sb.Length--; // Remove last char
datum = sb.ToString();
Console.WriteLine(datum);
輸出:
12457
StringBuilder在內部作業的方式比重復連接到字串更有效。
uj5u.com熱心網友回復:
您可以嘗試將 lambdaWhere與您的邏輯一起使用,這將獲得一個IEnumerable<char>然后傳入字串構造方法來獲取結果。
var result = Data.Where((x,i)=> i%3 != 2 && i != Data.Length -1).ToArray();
Data = new string(result);
uj5u.com熱心網友回復:
您可以利用.Chunk(),它可以讓您將字串拆分為(在您的場景中)三個字符的塊,以及 of .SkipLast(),它可以讓您跳過char每個塊中的最后一個。最后,加入所有chars 以創建輸出字串。
var output = string.Join(string.Empty,
input.Chunk(3).SelectMany(ch => ch.SkipLast(1)));
輸入
var input = "12345678901234567890123456789";
會產生
1245780134679023568
兩者.Chunk()和.SkipLast()都可以在System.Linq命名空間中找到。
示例小提琴在這里。
uj5u.com熱心網友回復:
這有幫助嗎?
for (int i = 0; i < Data.Length; i )
{
if((i 1)%3==0)
{
Data = Data.Remove(i, 1);
}
}
uj5u.com熱心網友回復:
我建議使用 Linq Where()結合余數運算子來收集索引 1 或 2、4 或 5 等處的字符:
var Data = "123456789abcdef";
Data = string.Join("", Data.Where((c, i) => (i 1) % 3 > 0));
作業 .NET 小提琴:https ://dotnetfiddle.net/DlSiiY
uj5u.com熱心網友回復:
另一個使用 aList<char>并倒退:
string input = "1234567890";
List<char> values = new List<char>(input.ToCharArray());
values.RemoveAt(values.Count - 1);
for(int i=(values.Count-1); i>=0; i--)
{
if ((i 1) % 3 == 0)
{
values.RemoveAt(i);
}
}
string output = new string(values.ToArray());
Console.WriteLine(" input: " input);
Console.WriteLine("output: " output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455740.html
上一篇:列印行之間互動的模字串加法
