wake-up-neo.com

.Net-Äquivalent der alten linken (String-, Länge-) Funktion?

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 .

63
Josh

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"
51
Noldorin

Fügen Sie einen Verweis auf die Microsoft.VisualBasic-Bibliothek hinzu, und Sie können Strings.Left verwenden, wobei genau dieselbe Methode ist. 

31
Garry Shutler

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.

30
Oded

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));
    }
13
CCondron
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);

5
Jeff Crawford

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!).

2
RobS

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)
2
Brad Mathews

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.

1
danfolkes

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("*"))...;

0
deadManN

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
0
user3029478