class Str:Client_C
{
string val;
string[] str = new string[100];
public void StrT1()
{
//1.正常情況
//2.兩個分隔符相鄰
//3.以分隔符開始或者結束。
//如果只有一次,做個細小的改變,讓他跟隨又規律的其他
int nIdx = -1;
int xIdn = val.IndexOf(',', 0); //必須從0開始,而不是現在的nIdx=-1
int maxIdn = val.Length-1;
int i = 0;
while (xIdn <= maxIdn && xIdn!=-1)
{
nIdx++;//將到達正式字符串,從此開始截取。,,hh //1.以分隔符開始,或者相鄰,處理特殊情況 if (nIdx == xIdn)
{
str[i++] = ""; //在小於最大索引的情況下遞增,等於最大都不往下找了
if (xIdn < maxIdn)
{
//nIdx不變,尋找下一個Idx
xIdn = val.IndexOf(',', nIdx + 1);
continue;
}
else //如果nIdx == xIdn,那么nIdx不變,xIdx該成-1,代表結束
{
xIdn = -1;
break;
}
}
str[i++] = val.Substring(nIdx, xIdn - nIdx);
//想想為什么是xIdx-nIdx,想想什么是下標,現在的nIdx和xIdx各代表什么,在什么位置。
nIdx = xIdn; //從后一個分隔符的下一個標記開始查
xIdn = val.IndexOf(',', nIdx+1);
}
//最后一次的時候,xIdn失效-1,同時也處理了以分隔符結束的情況,截取0個字符串的時候,結果為空,恰好
//沒經過while循環內的nIdx++,標記還停留在分隔符位置,所以要從nIdx+1開始
str[i] = val.Substring(nIdx+1, maxIdn - nIdx);//nIdx還未加1,計算長度的時候,直接相減恰好
Print();
}
public void Print()
{
StringBuilder sb = new StringBuilder();
foreach (string item in str)
{
sb.Append(item + " ");
}
Console.WriteLine(sb.ToString());
}
public void Client()
{
StrT1();
}
}
總結:編程的關鍵不在於處理好常規情況,而是處理好特殊情況,然后將兩種情況結合起來。