Es hängt wirklich davon ab, wie lange NVARCHAR dauert, da einige der oben genannten Methoden (insbesondere diejenigen, die über IntXX konvertieren) nicht funktionieren:
String s ="005780327584329067506780657065786378061754654532164953264952469215462934562914562194562149516249516294563219437859043758430587066748932647329814687194673219673294677438907385032758065763278963247982360675680570678407806473296472036454612945621946";
So etwas würde
String s ="0000058757843950000120465875468465874567456745674000004000".TrimStart(newChar[]{'0'});// s = "58757843950000120465875468465874567456745674000004000"
problematisch wenn strInput= "0000000";oder ähnlich. weil es eine leere Zeichenfolge anstelle einer Null zurückgibt.
Avrahamcool
2
@avrahamcool, das behandelt werden kann, indem man sich die Länge der Zeichenfolge ansieht und einfach zurückgibt, "0"wenn sie nach dem Trimmen leer ist. Oder mit PadLeft(1, '0').
problematisch wenn strInput= "0000000";oder ähnlich
avrahamcool
@Emjay, weil es eine leere Zeichenfolge anstelle einer Null zurückgibt.
Avrahamcool
22
@avrahamcool es würde immer noch genau das tun, was es sollte. Die Rückgabe einer einzelnen Null wäre eine Ausnahme und sollte vom Entwickler behandelt werden.
Nehmen wir an, die Saite ist sehr lang. Warum zweimal schneiden? Sie können die zugeschnittene Zeichenfolge in einer Variablen
speichern
@avrahamcool, was meinst du, wo wird es zweimal getrimmt? Danke für den Kommentar.
Msysmilu
ah, @avrahamcool, vielleicht habe ich es deshalb bearbeitet :) am Ende ist es ein Fragenspeicher gegen Rechenzeit; Ich denke, heute ist Speicher kein Problem mehr in solchen Anwendungen
problematisch wenn numberString= "0000000";oder ähnlich
avrahamcool
1
@msysmilu, da anstelle einer Null eine leere Zeichenfolge zurückgegeben wird.
Avrahamcool
1
@avrahamcool Du hast recht. Ergo schlug ich eine Antwort vor, um dies zu vermeiden
msysmilu
5
TryParse funktioniert, wenn Ihre Nummer kleiner als Int32.MaxValue ist . Dies gibt Ihnen auch die Möglichkeit, schlecht formatierte Zeichenfolgen zu verarbeiten. Funktioniert genauso für Int64.MaxValue und Int64.TryParse .
int number;if(Int32.TryParse(nvarchar,out number)){// etc...
number.ToString();}
Vielleicht übertrieben für die gestellte Frage, dies ist die Lösung, nach der ich suche, da sie auch das Entfernen von rechts aufgefüllten Nullen für Dezimalstellen ermöglicht. (Decimal.TryParse)
Winwaed
@JK Ich weiß, dass der Beitrag alt ist, aber ich mag diese Lösung wirklich, da sie sauber und sehr leicht zu verstehen ist. Nur eine Frage zum Ändern des Textes in einem Tastendruckereignis löst auch das textveränderte Ereignis aus - bin ich richtig?
Ken
3
Mit diesem Regex können Sie falsche Ergebnisse mit Ziffern vermeiden, die nur aus Nullen "0000" bestehen, und Ziffern beliebiger Länge bearbeiten:
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern.
Nic3500
Die Antwort wurde gemäß dem Vorschlag von @ Nic3500 verbessert
Antworten:
Es hängt wirklich davon ab, wie lange NVARCHAR dauert, da einige der oben genannten Methoden (insbesondere diejenigen, die über IntXX konvertieren) nicht funktionieren:
So etwas würde
quelle
strInput= "0000000";
oder ähnlich. weil es eine leere Zeichenfolge anstelle einer Null zurückgibt."0"
wenn sie nach dem Trimmen leer ist. Oder mitPadLeft(1, '0')
.Dies ist der Code, den Sie benötigen:
quelle
strInput= "0000000";
oder ähnlichstrInput.TrimStart('0').PadLeft(1, '0');
wird behandeln"0000" > "0"
.Code, um die Rückgabe einer leeren Zeichenfolge zu vermeiden (wenn die Eingabe "00000" entspricht).
quelle
return numberString.TrimStart('0');
quelle
numberString= "0000000";
oder ähnlichTryParse funktioniert, wenn Ihre Nummer kleiner als Int32.MaxValue ist . Dies gibt Ihnen auch die Möglichkeit, schlecht formatierte Zeichenfolgen zu verarbeiten. Funktioniert genauso für Int64.MaxValue und Int64.TryParse .
quelle
Mit diesem Regex können Sie falsche Ergebnisse mit Ziffern vermeiden, die nur aus Nullen "0000" bestehen, und Ziffern beliebiger Länge bearbeiten:
Und dieser reguläre Ausdruck entfernt führende Nullen an einer beliebigen Stelle innerhalb der Zeichenfolge:
quelle
Wenn Sie Folgendes verwenden, wird eine einzelne 0 zurückgegeben, wenn die Eingabe alle 0 ist.
quelle
quelle