2012-12-11 26 views
12

ho bisogno di dividere una stringa in C# come segue:stringa di Spalato dopo x quantità di altrettanti

La stringa è qualcosa di simile: 0000120400567

Ci sono sempre 0 s all'inizio. Nell'esempio sopra ci sono sei zeri seguiti da 120400567. Voglio dividere la stringa che ottengo l'ultima parte 120400567.

La quantità di zeri all'inizio potrebbe cambiare (l'ultimo numero di parte aumenterà di un numero), il che significa che possiamo avere 001245878945 e quello che voglio è 1245878945.

Come posso dividere questa stringa lasciando fuori il primo 0 o il primo x numero di zeri e ottenere solo il numero finale? Potrebbe essere che il numero non abbia zero all'inizio e il numero inizi direttamente dal primo numero ... ma potrebbe essere che il numero contenga 8 zeri e più di 2 o più cifre.

+0

stai cercando di 'split' una serie di numeri ** ** .. in questo caso si tratta di ** ** ok per dividere con il' regex' come indicato nelle ans ma ** se * * sarà un "numero singolo" che usare "regex" sarebbe un ** overkill ** specialmente se si sta per "dividere" con 'regex' ... – Anirudha

+0

Perché non solo analizzarlo su un numero intero e rimettilo in una stringa? – zzzzBov

risposta

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

(o

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

o

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

o ...)

5

Si potrebbe utilizzare int.Parse per convertire la stringa in un intero. Questo farebbe cadere gli zeri iniziali, ma è naturalmente limitato alle stringhe nell'intervallo di int (o long, se lo usate).

9

TrimStart è tuo amico. Tuttavia, devi stare attento a non finire con una stringa vuota quando il tuo originale è costituito solo da 0.

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

nitpicking: 'if (s.Length == 0)' potrebbe essere un po 'più veloce –

+0

@KooKiz: Probabilmente :-) – Douglas

0

Se si dispone di una serie di numeri nella stringa è possibile utilizzare (?:\b(?:0+|(?=[1-9]))) di dividere la stringa

Quindi la scissione 0534 000500 35435 040 con quanto sopra regex finirebbe con

534 
500 
35435 
40 

Se deve contenere solo un singolo numero Regex allora non è necessario e in particolare lo è

Ma se si vuole ancora split che stringa, è possibile farlo con (?:^0+|^)

4

Perché non si converte in Int32 o lunghi o quello che volete e poi convertirlo in una stringa?

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