如何重新格式化字符串以排除前导零?

7

我有这样的字符串:

var abc = "002";
var def = "023";

如何轻松地更改字符串,使前导零被删除?

6个回答

19

看一下TrimStart

numberString = numberString.TrimStart('0');

来自 MSDN:

TrimStart 方法从当前字符串中删除所有在 trimChars 参数中的前导字符。当遇到不在 trimChars 中的字符时,修剪操作停止。


1
比起其他假设值为整数的答案,这个答案好多了;因为值可能是“0012ABC”或“00999999999999999999”,这两种情况都会在int.Parse中失败。 - Kirk Broadhurst
请考虑此限制(不是主题,我知道):“System.String TrimStart(Char[])”仅在未指定修剪字符作为参数时受LINQ to Entities支持。 - G. Stoynev

14

最简单正确的方法是:

int.Parse(s).ToString();

对于输入的字符串 "0000",所有的 trim 方法都会失败,它们将返回一个空字符串而非正确的 "0"。


+1,你说得对。我以为字符串总是像0012这样的,而不是0000。你不会从0000中删除前导零。除非你想让它成为0吧。 - user195488
1
这在各种情况下都不起作用 - 字符串包含字母字符,是十进制的字符串表示,或者是大于Int32.MaxValue的整数。 - Kirk Broadhurst
@KirkBroadhurst:“前导零”通常用于数字字符串,不包括个位数为零的情况。此外,问题中的示例数据仅包含数字。 - Ben Voigt
我的意思是十进制,比如“0123.1”,但我理解你的观点,只是在充当魔鬼的代言人。你知道关于假设的那句话吧。 - Kirk Broadhurst
1
@KirkBroadhurst:你读了我回答的最后一句话吗?如果问题没有更好的规范,就没有100%正确的答案。 - Ben Voigt
+1 我不确定从 "0000" 中 '去除前导零' 是否应该结果为空字符串,但我同意你的评论 - 这个问题没有明确定义。 - Kirk Broadhurst

2
如果这个值始终为整数,你可以直接解析它:
abc = int.Parse(abc).ToString()

1

var str = int.Parse(abc).ToString();应该可以完成工作。将数字转换为int,然后再将其转换回字符串。


我的投票在这里,因为它也适用于负数。使用TrimStart方法的解决方案在这种情况下会失败。 - Mario Vernari
不包含负数,它是一个字符串。 - nologo
@nologo 他的意思是 TrimStart 方法对于像“-00123”这样的字符串无效。 - Oskar Kjellin
@Mario Vernari但是这对于“000ABC”不起作用。为什么要假设它将成为整数? - Kirk Broadhurst
很抱歉:您的字符串为什么以零开头?您应该有什么样的内容?它是一个数字、十六进制、一种编码还是其他什么? - Mario Vernari

1
var abc = "0023";
var zeroless = abc.TrimStart('0');

输出:"23"


不是关于OP话题的内容,但对于从搜索中偶然发现这篇文章的人来说,请考虑这个TrimStart的限制: 当没有指定修剪字符作为参数时,仅在LINQ to Entities中支持System.String TrimStart(Char[]) - G. Stoynev

1
        string some_string = "000045";
        string ur_desire = int.Parse(some_string).ToString();
        Console.WriteLine(ur_desire);

我认为这是一个好答案,因为它也适用于负数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接