Feedback

C# - Erweiterung für Stringumwandlungen

Veröffentlicht von am 11/28/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();
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!