Verarbeiten numerischer Zeichenfolgen
Aktualisiert: November 2007
Jeder numerische Typ verfügt über eine statische Parse-Methode, die Sie verwenden können, um die Zeichenfolgenentsprechung eines numerischen Typs in einen tatsächlichen numerischen Typ zu konvertieren. Mit diesen Methoden können Sie Zeichenfolgen verarbeiten, die mit einem der in Zahlenformatzeichenfolgen beschriebenen Formatbezeichner erzeugt wurden.
Die Zeichen, mit denen Währungssymbole, Tausendertrennzeichen und Dezimalkommas dargestellt werden, sind in Formatanbietern festgelegt. Die Parse-Methode akzeptiert einen Formatanbieter. Auf diese Weise können Sie kulturabhängige Zeichenfolgen festlegen und explizit verarbeiten. Wenn kein Formatanbieter angegeben ist, wird der mit dem aktuellen Thread verknüpfte Anbieter verwendet. Weitere Informationen finden Sie unter Übersicht über Formatierung.
Im folgenden Codebeispiel wird ein String-Wert in einen Integer-Wert konvertiert, dieser um 1 erhöht und schließlich das Ergebnis angezeigt.
Dim MyString As String = "12345"
Dim MyInt As Integer = Integer.Parse(MyString)
MyInt += 1
Console.WriteLine(MyInt)
' The result is "12346".
string MyString = "12345";
int MyInt = int.Parse(MyString);
MyInt++;
Console.WriteLine(MyInt);
// The result is "12346".
Die NumberStyles-Enumeration gibt das zulässige Format einer zu verarbeitenden Zeichenfolge an. Sie können mithilfe dieser Enumeration Zeichenfolgen verarbeiten, die ein Währungssymbol, ein Dezimalkomma, einen Exponenten, Klammern usw. enthalten. Beispielsweise kann in der Kultur en-US eine Zeichenfolge, die ein Komma enthält, nicht mit der Parse-Methode in einen integer-Wert umgewandelt werden, solange die NumberStyles.AllowThousands-Enumeration nicht übergeben wurde.
NumberStyles.AllowCurrencySymbol gibt an, dass eine Zahl als Währung und nicht als Dezimalzahl verarbeitet werden soll. NumberStyles.AllowDecimalPoint hingegen gibt an, dass ein Dezimalkomma zulässig ist. Gültige Dezimaltrennzeichen werden von der NumberDecimalSeparator-Eigenschaft oder der CurrencyDecimalSeparator-Eigenschaft des aktuellen NumberFormatInfo-Objekts bestimmt. NumberStyles.AllowThousands gibt an, dass Gruppentrennzeichen zulässig sind. Gültige Gruppentrennzeichen werden von der NumberGroupSeparator-Eigenschaft oder der CurrencyGroupSeparator-Eigenschaft des aktuellen NumberFormatInfo-Objekts bestimmt. Eine vollständige Tabelle der gültigen Typen, die aus nicht numerischen Zeichen bestehen, finden Sie in der Dokumentation zur NumberStyles-Enumeration.
Die NumberStyles-Enumeration verwendet bei der Verarbeitung die von der aktuellen Kultur angegebenen Zeichen. Wenn Sie keine Kultur festlegen, indem Sie ein CultureInfo-Objekt übergeben, für das die mit der verarbeiteten Zeichenfolge übereinstimmende Kultur festgelegt ist, wird die dem aktuellen Thread zugeordnete Kultur verwendet.
Der nun folgende Beispielcode ist fehlerhaft. Er würde eine Ausnahme auslösen. Daran soll die unsachgemäße Verarbeitung einer Zeichenfolge mit nicht numerischen Zeichen gezeigt werden. Zuerst wird eine neue CultureInfo erstellt und der Parse-Methode übergeben. Dadurch wird festgelegt, dass für die Verarbeitung die Kultur en-US verwendet wird.
Imports System.Globalization
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "123,456"
Dim MyInt As Integer = Integer.Parse(MyString, MyCultureInfo)
Console.WriteLine(MyInt)
' Raises System.Format exception.
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = "123,456";
int MyInt = int.Parse(MyString, MyCultureInfo);
Console.WriteLine(MyInt);
// Raises System.Format exception.
Wenn Sie die NumberStyles-Enumeration zusammen mit dem AllowThousands-Flag einsetzen, ignoriert die Parse-Methode das Komma, das im vorigen Beispiel die Ausnahme ausgelöst hat. Im folgenden Beispielcode wird dieselbe Zeichenfolge wie im vorigen Beispiel verwendet, doch wird diesmal keine Ausnahme ausgelöst. Wie im vorigen Beispiel wird zuerst eine neue CultureInfo erstellt und dann der Parse-Methode übergeben. Dadurch wird festgelegt, dass bei der Verarbeitung das in der Kultur en-US übliche Tausendertrennzeichen verwendet wird.
Imports System.Globalization
Dim MyCultureInfo As CultureInfo = new CultureInfo("en-US")
Dim MyString As String = "123,456"
Dim MyInt As Integer = Integer.Parse(MyString, NumberStyles.AllowThousands, MyCultureInfo)
Console.WriteLine(MyInt)
' The result is "123456".
using System.Globalization;
CultureInfo MyCultureInfo = new CultureInfo("en-US");
string MyString = "123,456";
int MyInt = int.Parse(MyString, NumberStyles.AllowThousands, MyCultureInfo);
Console.WriteLine(MyInt);
// The result is "123456".