如何删除前导零

时间:2011-08-10 12:23:19

标签: c# string

如何使用C#删除字符串中的前导零?

例如,在以下数字中,我想删除所有前导零。

0001234
0000001234
00001234

9 个答案:

答案 0 :(得分:272)

这是您需要的代码:

string strInput = "0001234";
strInput = strInput.TrimStart('0');

答案 1 :(得分:135)

这实际上取决于NVARCHAR的长度,因为上面的一些(尤其是通过IntXX转换的)方法不适用于:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

这样的事情

String s ="0000058757843950000120465875468465874567456745674000004000".TrimStart(new Char[] { '0' } );
// s = "58757843950000120465875468465874567456745674000004000"

答案 2 :(得分:27)

避免返回空字符串的代码(当输入类似于" 00000")。

string myStr = "00012345";
myStr = myStr.TrimStart('0');
myStr = myStr.Length > 0 ? myStr : "0";

答案 3 :(得分:23)

return numberString.TrimStart('0');

答案 4 :(得分:5)

如果您的电话号码小于TryParse,则

Int32.MaxValue有效。这也使您有机会处理格式错误的字符串。适用于Int64.MaxValueInt64.TryParse

int number;
if(Int32.TryParse(nvarchar, out number))
{
   // etc...
   number.ToString();
}

答案 5 :(得分:2)

当输入全部为0时,使用以下命令将返回单个0.

string s = "0000000"
s = int.Parse(s).ToString();

答案 6 :(得分:1)

这个正则表达式可以避免错误的结果,数字仅由零“0000”组成,并且可以处理任意长度的数字:

using System.Text.RegularExpressions;

/*
00123 => 123
00000 => 0
00000a => 0a
00001a => 1a
00001a => 1a
0000132423423424565443546546356546454654633333a => 132423423424565443546546356546454654633333a
*/

Regex removeLeadingZeroesReg = new Regex(@"^0+(?=\d)");
var strs = new string[]
{
    "00123",
    "00000",
    "00000a",
    "00001a",
    "00001a",
    "0000132423423424565443546546356546454654633333a",
};
foreach (string str in strs)
{
    Debug.Print(string.Format("{0} => {1}", str, removeLeadingZeroesReg.Replace(str, "")));
}

此正则表达式将删除字符串中任意位置的前导零:

new Regex(@"(?<!\d)0+(?=\d)");
//  "0000123432 d=0 p=002 3?0574 m=600"
//     => "123432 d=0 p=2 3?574 m=600"

答案 7 :(得分:0)

Regex rx = new Regex(@"^0+(\d+)$");
rx.Replace("0001234", @"$1"); // => "1234"
rx.Replace("0001234000", @"$1"); // => "1234000"
rx.Replace("000", @"$1"); // => "0" (TrimStart will convert this to "")

// usage
var outString = rx.Replace(inputString, @"$1");

答案 8 :(得分:-1)

我刚刚制作了这个,因为我需要一种简单的好方法。

如果到达最后一位数字,并且为零,它将保持不变。

对于超长字符串,也可以使用foreach循环代替。

我只是将每个领先的oldChar替换为newChar。


这对于将int格式化为字符串后刚解决的问题非常有用。

    /* Like this: */
    int counterMax = 1000;
    int counter = ...;
    string counterString = counter.ToString($"D{counterMax.ToString().Length}");
    counterString = RemoveLeadingChars('0', ' ', counterString);
    string fullCounter = $"({counterString}/{counterMax})";
    // = (   1/1000) ... ( 430/1000) ... (1000/1000)

    static string RemoveLeadingChars(char oldChar, char newChar, char[] chars)
    {
        string result = "";
        bool stop = false;
        for (int i = 0; i < chars.Length; i++)
        {
            if (i == (chars.Length - 1)) stop = true;
            if (!stop && chars[i] == oldChar) chars[i] = newChar;
            else stop = true;
            result += chars[i];
        }
        return result;
    }

    static string RemoveLeadingChars(char oldChar, char newChar, string text)
    {
        return RemoveLeadingChars(oldChar, newChar, text.ToCharArray());
    }

我总是倾向于使函数适合我自己的库,因此有一些选择。