2012-12-11 15 views
12

muszę podzielić ciąg w C#, jak następuje:Podział ciąg po x ilość samej liczbie

Ciąg jest coś takiego: 0000120400567

Istnieje zawsze 0 s na początku. W powyższym przykładzie znajduje się sześć zer, po których następuje 120400567. Chcę podzielić ciąg, który dostaję ostatnią część 120400567.

Ilość zer na początku może się zmienić (numer ostatniej części zwiększy się o jedną liczbę), co oznacza, że ​​możemy mieć 001245878945, a ja chcę mieć 1245878945.

Jak mogę podzielić ten ciąg, pozostawiając poza pierwszą 0 lub pierwszą x liczbę zer i uzyskać tylko numer końcowy? Może być tak, że liczba nie ma żadnego zera na początku, a liczba zaczyna się bezpośrednio od pierwszego numeru ... ale może być tak, że liczba zawiera 8 zer i 2 lub więcej cyfr.

+0

Czy próbujesz "podzielić" ** zakres liczb ** .. w takim przypadku jest to ** ok **, aby podzielić go na 'regex' jak podano w ans, ale ** jeśli * * będzie to "pojedyncza liczba" niż użycie 'regex' będzie ** przesadą ** specjalnie, jeśli zamierzasz" podzielić się "z' regex' ... – Anirudha

+0

Dlaczego po prostu nie parsować go do liczby całkowitej i odrzucić go na ciąg? – zzzzBov

Odpowiedz

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

(lub

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

lub

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

lub ...)

5

Można użyć int.Parse do konwersji String na Integer. Spowoduje to zniesienie zer wiodących, ale oczywiście ogranicza się do ciągów w zakresie int (lub długim, jeśli go używasz).

9

TrimStart jest twoim przyjacielem. Musisz jednak uważać, aby nie kończył się pusty ciąg, gdy oryginał składa się tylko z 0.

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

Nitpicking: 'if (s.Length == 0)' może być odrobinę szybsze –

+0

@KooKiz: Prawdopodobnie :-) – Douglas

0

Jeśli masz zakres liczb w ciąg można użyć (?:\b(?:0+|(?=[1-9]))) podzielić ten ciąg

Więc łupania 0534 000500 35435 040 z powyższym regex by skończyć z

534 
500 
35435 
40 

Jeśli ma zawierać tylko jeden numer Regex nie jest wymagany, a zwłaszcza splitting to

Ale jeśli nadal chcesz split ten ciąg, można to zrobić z (?:^0+|^)

4

Dlaczego nie przekształcić go w Int32 lub długi lub cokolwiek chcecie, a następnie przekształcić go w ciągu?

int i = int.Parse("0000120400567"); 
     string s = i.ToString(); 
Powiązane problemy