web-dev-qa-db-fra.com

Équivalent .Net de l’ancienne fonction vb left (chaîne, longueur)?

En tant que programmeur non .net, je recherche l'équivalent .net de l'ancienne fonction vb left(string, length). C'était paresseux en ce sens que cela fonctionnait pour n'importe quelle chaîne de longueur. Comme prévu, left("foobar", 3) = "foo" tandis que, plus utile encore, left("f", 3) = "f".

Dans .net string.Substring(index, length) lève des exceptions pour tout ce qui est hors limites. En Java, j’avais toujours le langage Apache-Commons lang.StringUtils à portée de main. Dans Google, je ne vais pas très loin en recherchant des fonctions de chaîne.

Modifier:

@Noldorin - Wow, merci pour vos extensions vb.net! Ma première rencontre, même si cela m'a pris plusieurs secondes pour faire la même chose en c #:

public static class Utils
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }
}

Notez la classe statique et la méthode ainsi que le mot clé this. Oui, ils sont aussi simples à appeler que "foobar".Left(3). Voir aussi c # extensions sur msdn .

63
Josh

Voici une méthode d'extension qui fera le travail.

<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

Cela signifie que vous pouvez l'utiliser comme la vieille fonction VB Left (c'est-à-dire Left("foobar", 3)) ou en utilisant la syntaxe plus récente de VB.NET, c'est-à-dire.

Dim foo = "f".Left(3) ' foo = "f"
Dim bar = "bar123".Left(3) ' bar = "bar"
51
Noldorin

Ajoutez une référence à la bibliothèque Microsoft.VisualBasic et vous pouvez utiliser le Strings.Left qui est exactement la même méthode. 

31
Garry Shutler

Une autre option d'une ligne serait quelque chose comme ce qui suit:

myString.Substring(0, Math.Min(length, myString.Length))

Où myString est la chaîne avec laquelle vous essayez de travailler.

30
Oded

n'oubliez pas le cas nul

  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
}

Si une erreur ne devrait pas se produire, la valeur null est renvoyée sous forme de chaîne vide, ainsi que les valeurs tronquées ou de base. Utilisez-le comme "testx" .Left (4) ou str.Right (12);

5
Jeff Crawford

vous pourriez faire votre propre

private string left(string inString, int inInt)
{
    if (inInt > inString.Length)
        inInt = inString.Length;
    return inString.Substring(0, inInt);
}

edit: le mien est en C #, vous devrez le changer pour vb

Vous pouvez soit encapsuler l'appel à la sous-chaîne dans une nouvelle fonction qui en teste la longueur comme suggéré dans d'autres réponses (la bonne façon) ou utiliser l'espace de noms Microsoft.VisualBasic et utiliser directement la gauche (généralement considéré comme étant le mauvais!

2
RobS

Une autre technique consiste à étendre l'objet chaîne en ajoutant une méthode Left ().

Voici l'article source sur cette technique:

http://msdn.Microsoft.com/en-us/library/bb384936.aspx

Voici mon implémentation (en VB):

Module StringExtensions

<Extension()>
Public Function Left(ByVal aString As String, Length As Integer)
    Return aString.Substring(0, Math.Min(aString.Length, Length))
End Function

Module de fin

Ensuite, placez-le en haut de tout fichier dans lequel vous souhaitez utiliser l'extension:

Imports MyProjectName.StringExtensions

Utilisez-le comme ceci:

MyVar = MyString.Left(30)
2
Brad Mathews

J'aime faire quelque chose comme ça:

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"

Cependant, si vous voulez des espaces de fuite ou de début, vous n’avez pas de chance.

J'aime beaucoup l'utilisation de Math.Min, cela semble être une meilleure solution.

1
danfolkes

Si vous voulez éviter d’utiliser une méthode d’extension et éviter une erreur de sous-longueur, essayez ceci:

string partial_string = text.Substring(0, Math.Min(15, text.Length)) 
// example of 15 character max
0
user3029478