遇到了一個需求,要把“12000.00001.00010.00032.00100” ; “00145.00002.12005.07042” ;“05439.07008.02070” 這樣的編碼轉換成“12000.1.10.32.100” ; “145.2.12005.7042” ;“5439.7008.2070” 這樣的形式,
分析
乍一看這個需求并不難,只是簡單的把0移除就行了,但是仔細思考一下,如果是簡單的用Replace方法來做,那就會讓10,100這樣的數字變為1,所以得自己寫一個方法,
先考慮到可以將編碼拆分,拆分之后的編碼就分別變成了12000 ;00001;00010;00032;00100,這樣,我們再根據第一個不是0的數字,來進行一個定位,獲得了第一個不是0的定位之后,來對單獨的字串洗掉,最后再將洗掉后的單獨字串合并到一起,
方法
根據思路,我們寫出了方法:
public static string ChangeTheCode(string s)
{
string result = "";
string[] sArray = s.Split('.');//通過“.”來拆分字串
for (int j = 0; j < sArray.Count(); j++)
{
string test = sArray[j];
if (!test.Contains("0"))//沒有0則直接添加
{
result = result + "." + test;
}
else//有0則查找第一個非0的標簽
{
for (int i = 0; i < test.Length; i++)
{
string a = test.Substring(i, 1);//逐個判斷是否是0
if (!a.Equals("0"))
{
int index = i;
result = result + "." + test.Remove(0, index);
break;
}
}
}
}
if (result.StartsWith("."))//如果開頭有“.”,就把它去掉
{
result = result.Remove(0, 1);
}
return result;
}
方法呼叫
class Program
{
static void Main(string[] args)
{
string s = "12000.00001.00010.00032.00100";
Console.WriteLine(ChangeTheCode(s));
string a = "00145.00002.12005.07042";
Console.WriteLine(ChangeTheCode(a));
string b = "05439.07008.02070";
Console.WriteLine(ChangeTheCode(b));
Console.ReadKey();
}
最后的執行結果如圖:

思考
因為博主的資料結構學的不是太好,所以在寫方法的程序中,沒有怎么考慮到編程的時間復雜度,
讓我們這一個簡單的需求,時間復雜度達到了O(n2),博主才疏學淺,希望各位大佬有好的方法,指點一二,
另一種方法
根據網友weixin_43602823 提供的方法:
public static string ChangeTheCode2(string s)
{
string result = "";
string[] sArray = s.Split('.');
for (int i = 0; i < sArray.Length; i++)
{
result = result + "." + int.Parse(sArray[i]);
}
result = result.Trim('.');
return result;
}
我們可以看到代碼非常簡潔,而且也能完美的實作需求(針對純數字型的編碼),
再次感謝這位網友!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243236.html
標籤:其他
