C# 如何使用C语言删除前导零#

C# 如何使用C语言删除前导零#,c#,string,C#,String,如何使用C#删除字符串中的前导零 例如,在下面的数字中,我想删除所有前导零 0001234 0000001234 00001234 这实际上取决于NVARCHAR的长度,因为上面的一些方法(尤其是通过IntXX转换的方法)将无法在以下情况下工作: String s = "00578032758432906750678065706578637806175465453216495326495246921546293456291456219456214951624951629456321943785

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

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

0001234
0000001234
00001234

这实际上取决于NVARCHAR的长度,因为上面的一些方法(尤其是通过IntXX转换的方法)将无法在以下情况下工作:

String s = "005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";
像这样的东西

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

returnnumberString.TrimStart('0')

在您的号码小于时有效。这也使您有机会处理格式错误的字符串。对和也一样


这是您需要的代码:

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

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


当输入均为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"

newregex(@)(?我只是精心制作了这个,因为我需要一个好的、简单的方法

如果它到达最后一位,如果它是零,它将保持不变

也可以使用foreach循环代替超长字符串

我只是用newChar替换每个前导的oldChar


这对于我刚刚解决的一个问题来说是非常好的,在将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)

静态字符串removeReadingChars(char oldChar、char newChar、char[]chars)
{
字符串结果=”;
bool-stop=false;
for(int i=0;i


我总是倾向于使我的函数适合我自己的库,所以有一些选项。

我认为“nvarchar数据类型”是指字符串。“C”代表“C”…当
strInput=“0000000”时会出现问题“;
或similar@Emjay因为它将返回一个空字符串而不是一个零。@avrahamcool它仍然会执行它应该执行的操作。返回一个零将是一个例外,应该由开发人员处理。
strInput.TrimStart('0')。PadLeft(1,'0');
将处理
“0000”>“0”
。当
numberString=“0000000”时出现问题;
或similar@msysmilu因为它将返回一个空字符串,而不是一个零。@avrahamcool你是对的。因此,我建议了一个答案来避免这个问题。对于所提出的问题,这可能是一个过多的问题,这是我正在寻找的解决方案,因为它还允许删除小数的右填充零。(Decimal.TryParse)@JK我知道这篇文章很旧,但我真的很喜欢这个解决方案,因为它简洁易懂。只要一个问题在按键事件中更改文本,就会触发textchanged事件-我对吗?当
strInput=“0000000”出现问题时;
或类似。因为它将返回一个空字符串,而不是一个零。@avrahamcool可以通过查看字符串的长度并简单地返回
“0”
,如果修剪后字符串为空。或者使用
PadLeft(1,'0')
。甚至有一个维基百科页面在上面。有趣的是“前导零是位置表示法中数字字符串中第一个非零数字之前的任何0位。”。例如,从“000”中删除前导零将得到“不是0”。我认为这是正确的,尤其是当您从函数返回字符串时(如前所述,调用方可以处理空字符串,并在需要时使用零)。假设字符串很长,为什么要修剪两次?可以将修剪后的字符串保存在variable@avrahamcool,你是什么意思,在哪里修剪了两次?谢谢你的评论。啊,@avrahamcool,也许这就是我编辑它的原因:)最后,这是一个关于内存与计算时间的问题;我想今天,内存在这类应用程序中不再是一个问题,而这段代码可能会回答这个问题,提供关于如何和/或为什么解决这个问题的附加上下文将提高答案的长期价值。根据@Nic3500的建议改进答案
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");
    /* 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());
    }