Als Nicht-.net-Programmierer suche ich das .net-Äquivalent der alten VB-Funktion left(string, length)
. Es war faul, dass es für jede Länge Saite funktionierte. Wie erwartet left("foobar", 3) = "foo"
während am hilfreichsten left("f", 3) = "f"
.
In .net string.Substring(index, length)
wirft Ausnahmen für alles außerhalb des Bereichs. In Java hatte ich immer die Apache-Commons lang.StringUtils zur Hand. Bei Google bin ich nicht sehr lange auf der Suche nach String-Funktionen.
Bearbeiten:
@Noldorin - Wow, danke für deine vb.net-Erweiterungen! Meine erste Begegnung, obwohl ich einige Sekunden gebraucht habe, um dasselbe in c # zu tun:
public static class Utils
{
public static string Left(this string str, int length)
{
return str.Substring(0, Math.Min(length, str.Length));
}
}
Beachten Sie die statische Klasse und Methode sowie das Schlüsselwort this
. Ja, sie sind so einfach aufzurufen wie "foobar".Left(3)
. Siehe auch c # -Erweiterungen unter msdn .
Hier ist eine Erweiterungsmethode, die die Arbeit erledigen wird.
<System.Runtime.CompilerServices.Extension()> _
Public Function Left(ByVal str As String, ByVal length As Integer) As String
Return str.Substring(0, Math.Min(str.Length, length))
End Function
Das heißt, Sie können sie genauso wie die alte VB Left
-Funktion (d. H. Left("foobar", 3)
) oder die neuere VB.NET-Syntax verwenden, d. H.
Dim foo = "f".Left(3) ' foo = "f"
Dim bar = "bar123".Left(3) ' bar = "bar"
Fügen Sie einen Verweis auf die Microsoft.VisualBasic-Bibliothek hinzu, und Sie können Strings.Left verwenden, wobei genau dieselbe Methode ist.
Eine weitere Option für eine Zeile wäre etwa Folgendes:
myString.Substring(0, Math.Min(length, myString.Length))
Dabei ist myString die Zeichenfolge, mit der Sie arbeiten möchten.
vergiss nicht den Nullfall
public static string Left(this string str, int count)
{
if (string.IsNullOrEmpty(str) || count < 1)
return string.Empty;
else
return str.Substring(0,Math.Min(count, str.Length));
}
using System;
public static class DataTypeExtensions
{
#region Methods
public static string Left(this string str, int length)
{
str = (str ?? string.Empty);
return str.Substring(0, Math.Min(length, str.Length));
}
public static string Right(this string str, int length)
{
str = (str ?? string.Empty);
return (str.Length >= length)
? str.Substring(str.Length - length, length)
: str;
}
#endregion
}
Sollte kein Fehler auftreten, gibt Nullen als leere Zeichenfolge zurück, gibt getrimmte Werte oder Basiswerte zurück. Verwenden Sie es wie "testx". Left (4) oder str.Right (12);
sie könnten sich Ihre eigenen machen
private string left(string inString, int inInt)
{
if (inInt > inString.Length)
inInt = inString.Length;
return inString.Substring(0, inInt);
}
edit: meins ist in c #, Sie müssen es für vb ändern
Sie können den Aufruf entweder in eine neue Funktion umschließen, die die Länge des Aufrufs testet (wie in anderen Antworten vorgeschlagen) (der richtige Weg), oder den Microsoft.VisualBasic-Namespace verwenden und left direkt verwenden (im Allgemeinen als den falschen Weg betrachtet!).
Eine weitere Technik besteht darin, das String-Objekt durch Hinzufügen einer Left () - Methode zu erweitern.
Hier ist der Quellartikel zu dieser Technik:
http://msdn.Microsoft.com/de-de/library/bb384936.aspx
Hier ist meine Implementierung (in VB):
Modul StringExtensions
<Extension()>
Public Function Left(ByVal aString As String, Length As Integer)
Return aString.Substring(0, Math.Min(aString.Length, Length))
End Function
Modul beenden
Fügen Sie diese dann an den Anfang einer Datei ein, in der Sie die Erweiterung verwenden möchten:
Imports MyProjectName.StringExtensions
Verwenden Sie es so:
MyVar = MyString.Left(30)
Ich mache so etwas gerne:
string s = "hello how are you";
s = s.PadRight(30).Substring(0,30).Trim(); //"hello how are you"
s = s.PadRight(3).Substring(0,3).Trim(); //"hel"
Wenn Sie jedoch nachgestellte oder beginnende Leerzeichen wünschen, haben Sie kein Glück.
Ich mag die Verwendung von Math.Min sehr, es scheint eine bessere Lösung zu sein.
Nur in ganz besonderem Fall:
Wenn Sie dies links tun, überprüfen Sie die Daten mit einer Teilzeichenfolge, zum Beispiel: if(Strings.Left(str, 1)=="*") ...;
Dann können Sie auch C # -Instanzmethoden wie StartsWith
und EndsWith
verwenden, um diese Aufgaben auszuführen. if(str.StartsWith("*"))...;
Wenn Sie die Verwendung einer Erweiterungsmethode und einen Fehler wegen zu geringer Länge vermeiden möchten, versuchen Sie dies
string partial_string = text.Substring(0, Math.Min(15, text.Length))
// example of 15 character max