Feedback

C# - Erweiterung für Stringumwandlungen

Veröffentlicht von am 28.11.2008
(4 Bewertungen)
Diese Erweiterungsmethode ermöglicht die einfache Umwandlung eines Strings in Integer, Double und DateTime.

Aus den umzuwandelnden Strings werden die numerischen Anteile verwendet (siehe Beispiel, gilt nicht für DateTime).

Bei der Umwandlung eines Strings zu Double kann das Komma (,) oder der Punkt (.) als Dezimaltrennzeichen verwendet werden.

Beispiel:

string s1 = "abc1234def";
int? i1 = s1.Str2Int();

string s2 = "abc123,456def";
string s3 = "abc123.456def";
double? d2 = s2.Str2Double();
double? d3 = s3.Str2Double();

string s4 = "28.11.2008 15:07";
DateTime? dt4 = s4.Str2Date();
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

using System;
using System.Text.RegularExpressions;

namespace gfoidl.Tools
{
	public static class StringExtensions
	{
		// Für bessere Leistung werden die Regex hier erstellt:
		private static readonly Regex _regexInt = new Regex(@"\d+");
		private static readonly Regex _regexDouble = new Regex(
					@"\d+(" +
					System.Globalization.NumberFormatInfo
					.CurrentInfo.NumberDecimalSeparator +
					@")?(\d+)*");
		//---------------------------------------------------------------------
		/// <summary>
		/// Konvertiert eine Zeichenfolge in eine Ganzzahl
		/// </summary>
		/// <param name="s">
		/// Zu konvertierender String (zB "123456" oder "text123456BlaBlaBla")
		/// </param>
		/// <returns>
		/// Ganzahlrepräsentation der Zeichenfolge
		/// </returns>
		/// <remarks>
		/// Zum Finden der Zahl im Text werden reguläre Ausdrücke verwendet
		/// </remarks>
		public static int? Str2Int(this string s)
		{
			if (string.IsNullOrEmpty(s))
				return null;
			else
			{
				int i;
				if (int.TryParse(_regexInt.Match(s).Value, out i))
					return i;
				else
					return null;
			}
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Konvertiert eine Zeichenfolge in eine Dezimalzahl unabhängig
		/// vom Dezimaltrennzeichen
		/// </summary>
		/// <param name="s">
		/// Zu konvertierender String (zB "123.456" oder "123,456")
		/// </param>
		/// <returns>
		/// Dezimalrepräsentation der Zeichenfolge
		/// </returns>
		public static double? Str2Double(this string s)
		{
			if (string.IsNullOrEmpty(s))
				return null;
			else
			{
				double d;
				string tmp = s.Replace(
					".",
					System.Globalization.NumberFormatInfo
					.CurrentInfo.NumberDecimalSeparator);
				tmp = _regexDouble.Match(tmp).Value;

				if (double.TryParse(tmp, out d))
					return d;
				else
					return null;
			}
		}
		//---------------------------------------------------------------------
		public static DateTime? Str2Date(this string s)
		{
			if (string.IsNullOrEmpty(s))
				return null;
			else
			{
				DateTime d;
				if (DateTime.TryParse(s, out d))
					return d;
				else
					return null;
			}
		}
	}
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!