如何使用C#去除字符串中的前导零?
例如,在以下数字中,我想要删除所有前导零。
0001234
0000001234
00001234
这是你需要的代码:
string strInput = "0001234";
strInput = strInput.TrimStart('0');
这主要取决于NVARCHAR的长度,因为一些方法(特别是通过IntXX进行转换的方法)对以下情况无效:
String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";
类似这样的东西
String s ="0000058757843950000120465875468465874567456745674000004000".TrimStart(new Char[] { '0' } );
// s = "58757843950000120465875468465874567456745674000004000"
strInput="0000000"
或类似的情况时会存在问题,因为它将返回一个空字符串而不是一个零。 - avrahamcoolPadLeft(1, '0')
。 - Cœur避免返回空字符串的代码(例如当输入为“00000”时)。
string myStr = "00012345";
myStr = myStr.TrimStart('0');
myStr = myStr.Length > 0 ? myStr : "0";
返回去除首位零的数字字符串。
numberString="0000000"
或类似情况时存在问题。 - avrahamcoolstring s = "0000000"
s = int.Parse(s).ToString();
TryParse 可以用于小于 Int32.MaxValue 的数字。这也给了你处理格式不正确的字符串的机会。对于 Int64.MaxValue 和 Int64.TryParse,使用方法相同。
int number;
if(Int32.TryParse(nvarchar, out number))
{
// etc...
number.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");
我只是按照需要寻找一个好的、简单的方式来完成这个。
如果他们到了最后一位数字,若是0就会保留下来。
你也可以使用 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());
}
我总是倾向于使我的函数适合于我的库,因此有多种选择。
string.TrimStart()
容易阅读,也可能存在更多的错误。 - C.Champagne
strInput= "0000000";
或类似情况时存在问题。 - avrahamcoolstrInput.TrimStart('0').PadLeft(1, '0');
可以将"0000" > "0"
处理成正确的结果。 - Chris Romp