如何使用 C # 删除前导零

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

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

0001234
0000001234
00001234
194330 次浏览

这实际上取决于 NVARCHAR 的长度,因为上面的一些方法(特别是那些通过 IntXX 转换的方法)无法工作:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

像这样的东西

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

return numberString.TrimStart('0');

如果你的数字小于 最大值,尝试解析 可以工作。这也使您有机会处理格式糟糕的字符串。对于 最大值Int64.TryParse也是如此。

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

这是你需要的代码:

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

代码,以避免返回空字符串(当输入类似于“00000”时)。

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

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

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

这个正则表达式让你避免错误的结果与数字只包含从零“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"
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");

我只是制作这个,因为我需要一个好的,简单的方法。

如果它到达最后一个数字,如果它是一个零,它将留下来。

您还可以使用 foreach 循环来代替超长字符串。

我只是用新的字符替换每一个引导的旧字符。


这对于我刚刚解决的一个问题非常有用,在将 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());
}

我总是倾向于让我的函数适合我自己的库,所以有很多选择。