-4

例如,如果有一个字符串“000001234090883450”。如何删除第一个“0” 通常我会使用子字符串,然后使用 string.Remove 删除前五个“0”。但它会切断字符串中的所有“0”。是否有可能只删除前五个“0”,而字符串的其余部分保持不变?

编辑:如果我不够具体,我深表歉意。我想说的是那个字符串中“0”的数量不是恒定的。“0”是用户输入,所以下次它可能是:“000123325435043540035”

4

4 回答 4

7

你有很多选择——如果你想去掉所有前导零字符,一个简单的选择是:

var result = "000001234090883450".TrimStart('0');

通常我会使用子字符串,然后删除前五个

正如您所提到Substring的,您还可以使用Substring删除前 5 个字符(如果您只想始终删除 5 个字符)。Remove如果您已经在使用,则没有理由使用Substring

var result = "000001234090883450".Substring(5);
于 2013-09-23T18:42:45.183 回答
1

另一种解释:您想"00000"从 string 的每次出现中删除前导"000001234090883450"。这可以使用正则表达式前瞻来完成:

string s = Regex.Replace("...000001234090883450...", "00000(?=1234090883450)", "");
// Result: "...1234090883450..."
于 2013-09-23T18:46:07.277 回答
1

如果字符串的格式是可预测的,您可以使用转换:

var s = "000001234090883450";
s = long.Parse(s).ToString(); // convert string to long and then back to string
于 2013-09-23T18:56:41.553 回答
1

@Ajay_C:如果您的问题确实如您在评论中所述:

我需要 if 语句,因为我需要在数字前面添加一个“1”,如果字符串的开头没有任何“0”。

然后你想要这样的东西:

class Program
{
  static string TransformUserInput( string s )
  {
    if ( s == null ) throw new ArgumentNullException("s") ;
    string transformed = "" ;
    if ( s.Length > 0 )
    {
      transformed = rxLeadingZeros.Replace(s, m => m.Length == 0 ? "1" : m.Length == s.Length ? "0" : "" ) ;
    }
    return transformed ;
  }
  private static readonly Regex rxLeadingZeros = new Regex( @"^0*");

  static void Main( string[] args )
  {
    string [] values = { "" , "0" , "000" , "000000987654321000" , "54321000" , "0000000000000000000000000000000" , "000000000000000000009876543210" , } ;
    foreach ( string raw in values )
    {
      string cooked = TransformUserInput(raw) ;
      Console.WriteLine( "raw    : {0}",raw) ;
      Console.WriteLine( "cooked : {0}",cooked);
      Console.WriteLine() ;
    }
    return;
  }
}

它执行以下操作:

  • 匹配所有前导零0字符(可能没有)
  • 如果字符串为空,则返回空字符串。
  • 否则,返回通过转换它创建的字符串:
    • 如果匹配长度为零(意味着没有前导零),则将 a1附加到字符串中,
    • 否则,如果匹配长度是整个源字符串的长度(意味着源字符串0为零,则返回单个
    • 否则(我们匹配了 1 个或多个前导零,但不是整个源字符串),我们将前导零替换为空 (nil) 字符串String.Empty

这是输出:

raw    :
cooked :

raw    : 0
cooked : 0

raw    : 000
cooked : 0

raw    : 000000987654321000
cooked : 987654321000

raw    : 54321000
cooked : 154321000

raw    : 0000000000000000000000000000000
cooked : 0

raw    : 000000000000000000009876543210
cooked : 9876543210
于 2013-09-23T21:51:40.980 回答