编码去0的方法(C#)

遇到了一个需求,要把“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(n²),博主才疏学浅,希望各位大佬有好的方法,指点一二。

另一种方法

根据网友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;
        }

我们可以看到代码非常简洁,而且也能完美的实现需求(针对纯数字型的编码)。

再次感谢这位网友!!!

案例

看到这么多人需要,于是我写了个小程序,用来帮大家给编码补0或者去0,下面是程序界面(本人才疏学浅,设计比较简陋),源码的下载目录已经附上,用WPF写的,有需要的可以自取。

在这里插入图片描述
源码下载链接https://download.csdn.net/download/weixin_46433786/14948165

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值