2012-12-11 16 views
12

のx量の後、私は次のようにC#で文字列を分割する必要が0000120400567分割文字列と同じ数の

冒頭に0 sが常にあります。上記の例では、0が6つあり、その後に120400567が続きます。私は最後の部分を取得する文字列を分割したい120400567

最初にゼロの量が変更される可能性があります(最後の部分の数が1つ増えます)。すなわち、001245878945を持つことができ、私が望むのは1245878945です。

この文字列を分割して最初の0か最初のx量の0を残して終了番号のみを取得するにはどうすればよいですか?数字が最初にゼロを持たず、数字が最初の数字から直接始まるようにすることもできますが、数値には8個のゼロと2個以上の桁数が含まれている可能性があります。

+0

あなたは、**範囲の数字を**分割しようとしていますか?その場合は、**のように**正規表現で分割することができます** ** * * 'regex'を使うよりも' single number'になるでしょう**あなたが 'regex'で' split 'しようとすると**過剰になるでしょう** – Anirudha

+0

なぜそれを整数に解析してみませんか?それを文字列にキャストしますか? – zzzzBov

答えて

23
string withoutLeadingZeroes = withLeadingZeroes.TrimStart('0'); 

(または

string withoutLeadingZeroes = Regex.Replace(withLeadingZeroes, "^0*", ""); 

または

string withoutLeadingZeroes = new String(
    withLeadingZeroes.SkipWhile(c => c == '0').ToArray()); 

か...)

5

あなたは文字列を整数に変換するためにint.Parseを使用することができます。これは先行ゼロを削除しますが、もちろんintの範囲内の文字列に制限されています(または使用する場合は長い)。

9

TrimStartはあなたの友人です。ただし、オリジナルが0のみの場合は、空の文字列で終わらないように注意する必要があります。あなたは、文字列内の数値の範囲を持っている場合は

string s = "0000120400567"; 
s = s.TrimStart('0'); 
if (s == "") 
    s = "0"; 
+0

ニックピッキング: 'if(s.Length == 0)'が少し速いかもしれない –

+0

@KooKiz:おそらく:-) – Douglas

0

あなたは

534 
500 
35435 
40 

で終わるだろう上記regexと、その文字列に

だから、分割0534 000500 35435 040を分割する(?:\b(?:0+|(?=[1-9])))を使用することができます単一の数字だけを含む予定の場合は、Regexは必要ありません。特にsplittingです。

しかし、あなたはまだその文字列をsplitしたい場合は、(?:^0+|^)

4

なぜあなたはあなたが好きなint32のか長いかに変換し、その文字列に変換していないでそれを行うことができますか?

int i = int.Parse("0000120400567"); 
     string s = i.ToString();