如何使用C#删除前导零


134

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

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

0001234
0000001234
00001234

3
通过“ nvarchar数据类型”,我假设您的意思是字符串。

“ C£”代表“ C#” ...
2014年

Answers:


151

它实际上取决于NVARCHAR多长时间,因为上述几种方法(尤其是通过IntXX进行转换的方法)不适用于:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";

这样的事情会

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

17
问题何时strInput= "0000000";或类似。因为它将返回一个空字符串而不是一个零。
avrahamcool 2014年

2
@avrahamcool,可以通过查看字符串的长度并"0"在修剪后是否为空的情况下简单返回来处理。或使用PadLeft(1, '0')
心教堂

310

这是您需要的代码:

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

7
问题何时strInput= "0000000";或类似
avrahamcool 2014年

@Emjay,因为它将返回一个空字符串而不是一个零。
avrahamcool 2014年

22
@avrahamcool它仍将完全按照其应有的方式运行。返回单个零将是一个例外,应由开发人员处理。
user609926 2014年

12
strInput.TrimStart('0').PadLeft(1, '0');将处理"0000" > "0"
克里斯·隆普

30

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

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

2
假设字符串很长,为什么要修剪两次?您可以将修剪后的字符串保存在变量中
avrahamcool 2014年

@avrahamcool,您的意思是,它在哪里修剪了两次?感谢您的评论。
msysmilu

啊,@ avrahamcool,也许这就是为什么我编辑它的原因:)最后,这是一个内存与计算时间的问题;我想今天在这些应用程序中内存不再是问题了
msysmilu


5

如果您的数字小于Int32.MaxValue,TryParse可以工作。这也使您有机会处理格式错误的字符串。对于Int64.MaxValueInt64.TryParse的工作原理相同。

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

也许对于所提出的问题来说过于矫kill过正,这是我正在寻找的解决方案,因为它还允许删除小数点后右填充的零。(Decimal.TryParse)
Winwaed

@JK我知道帖子很旧,但是我很喜欢这个解决方案,因为它很干净而且很容易理解。在按键事件中更改文本只是一个问题,也会触发textchanged事件-我正确吗?
2016年

3

此正则表达式让您避免数字的错误结果,该结果仅由零“ 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"

2

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

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

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");

5
尽管此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高​​答案的长期价值。
Nic3500 '18

根据@ Nic3500的建议改进了答案
Bharat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.