-4

たとえば、「000001234090883450」という文字列があるとします。最初の "0" を削除する方法 通常、substring を使用してから、string.Remove を使用して最初の 5 つの "0" を削除します。ただし、文字列の「0」はすべてカットされます。最初の 5 つの「0」のみを削除して、残りの文字列をそのままにすることは何とか可能ですか?

編集:具体的でない場合は申し訳ありません。私が言いたかったのは、その文字列の「0」の数は一定ではないということです。「0」はユーザー入力であるため、次回は「000123325435043540035」になる可能性があります

4

4 に答える 4

7

多くのオプションがあります - 先頭のゼロ文字をすべて削除したい場合、簡単なオプションは次のとおりです。

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

通常、部分文字列を使用してから最初の 5 つを削除します。

前述Substringのように、最初の 5 文字を削除するために使用することもできますSubstring(常に 5 文字を削除したい場合)。Removeすでに使用している場合、使用する理由はありませんSubstring:

var result = "000001234090883450".Substring(5);
于 2013-09-23T18:42:45.183 に答える
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: あなたの問題が実際にコメントで述べたとおりである場合:

文字列の先頭に「0」がない場合、数値の前に「1」を追加する必要があったため、if ステートメントが必要でした。

次に、次のようなものが必要です。

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 に答える
1

"00000"別の解釈: string が出現するたびに先頭を削除します"000001234090883450"。これは、正規表現の先読みを使用して実行できます。

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