Comment obtenir les cinq premiers caractères d'une chaîne


133

J'ai lu cette question pour obtenir le premier caractère de la chaîne. Existe-t-il un moyen d'obtenir le premier nombre de caractères n d'une chaîne en C #?


La question précédente concerne les char** s et vous demandez les ** caractères . Ce n'est pas la même chose. 𣊾et il 𣇞y a deux caractères que j'avais besoin d'utiliser hier qui ont échoué dans le logiciel écrit en C # que j'utilisais parce que le programmeur ne connaissait pas la différence entre un charet un caractère. Ne tombez pas dans ce piège!
hippietrail

Réponses:


218

Vous pouvez utiliser Enumerable, comme:

char[] array = yourStringVariable.Take(5).ToArray();

Ou vous pouvez utiliser String.Substring .

string str = yourStringVariable.Substring(0,5);

N'oubliez pas que cela String.Substringpourrait lever une exception si la longueur de la chaîne est inférieure aux caractères requis.

Si vous souhaitez récupérer le résultat sous forme de chaîne, vous pouvez utiliser:

  • Utilisation du constructeur de chaînes et de LINQ Take

    string firstFivChar = new string(yourStringVariable.Take(5).ToArray());

Le plus avec l'approche n'est pas de vérifier la longueur avant la main.

  • L'autre façon est d'utiliser String.Substringavec la vérification des erreurs

comme:

string firstFivCharWithSubString = 
    !String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5
    ? yourStringVariable.Substring(0, 5)
    : yourStringVariable;

3
string val = nouvelle chaîne (yourStringVariable.Take (6) .ToArray ()); mais Substring sera une erreur si la longueur de yourStringVariable est inférieure à 5
Moji

1
IsNullOrWhiteSpaceest faux ici. Considérez une chaîne avec 10 blancs - votre code renverra tous les 10. Utilisez à la IsNullOrEmptyplace. (Il n'est pas bon de combiner IsNullOrWhiteSpaceavec un autre test; Au lieu de cela, testez null + vide, alors Trimsi c'est le comportement spécifié, alors faites les tests / opérations nécessaires.)
ToolmakerSteve

1
Vous pouvez enregistrer un appel à ToArray () en utilisant String.Concat () comme ceci: string firstFivChar = String.Concat (yourStringVariable.Take (5));
BlueFuzzyThing


38

Vous pouvez utiliser Substring (int startIndex, int length)

string result = str.Substring(0,5);

La sous-chaîne commence à une position de caractère spécifiée et a une longueur spécifiée. Cette méthode ne modifie pas la valeur de l'instance actuelle. Au lieu de cela, il renvoie une nouvelle chaîne avec des caractères de longueur à partir de la position startIndex dans la chaîne actuelle, MSDN

Que faire si la chaîne source comporte moins de cinq caractères? Vous obtiendrez une exception en utilisant la méthode ci-dessus. Nous pouvons mettre une condition pour vérifier si le nombre de caractères dans la chaîne est supérieur à 5, puis obtenir les cinq premiers via Substring. Remarque J'ai attribué la chaîne source à la variable firstFiveChar. Le firstFiveChar ne change pas si les caractères sont inférieurs à 5, donc une autre partie n'est pas requise.

string firstFiveChar = str;
If(!String.IsNullOrWhiteSpace(yourStringVariable) && yourStringVariable.Length >= 5)
      firstFiveChar = yourStringVariable.Substring(0, 5);

29

Personne n'a mentionné comment effectuer les vérifications appropriées lors de l'utilisation Substring(), alors je voulais contribuer à ce sujet.

Si vous ne voulez pas utiliser Linqet aller avec Substring(), vous devez vous assurer que votre chaîne est plus grande que le deuxième paramètre (longueur) de la Substring()fonction.

Disons que vous avez besoin des 5 premiers caractères. Vous devriez les obtenir avec un chèque approprié, comme ceci:

string title = "love" // 15 characters
var firstFiveChars = title.Length <= 5 ? title : title.Substring(0, 5);

// firstFiveChars: "love" (4 characters)

Sans cette vérification, la Substring()fonction lèverait une exception car elle itérerait à travers des lettres qui ne sont pas là.

Je pense que vous avez l'idée ...



Je suis content que cela t'aie plu.
ilter

Cela m'a beaucoup aidé, mais pouvez-vous expliquer ce que cela fait exactement dans cette ligne?
jimbob

Je vérifierais quelques exemples sur sous-chaîne. Il prend des paramètres pour les index. L'index de départ est 0. Si vous écrivez quelque chose de plus grand (ou plus petit, d'ailleurs) que le dernier index de n'importe quel tableau, vous obtenez une exception d'index. Cette vérification, dans l'exemple, vise à éviter cette exception.
ilter

Hahhahaha! :) C'était une question à laquelle j'ai répondu. Aurais-je dû laisser cette question sans réponse? :)
ilter

18

Le problème .Substring(,)est que vous devez vous assurer que la chaîne donnée a au moins la longueur du nombre de caractères demandé, sinon un ArgumentOutOfRangeExceptionsera renvoyé.

Solution 1 (en utilisant 'Substring'):

var firstFive = stringValue != null ? 
                   stringValue.Substring(0, stringValue.Length >= 5 ? 5 : stringValue.Length) :
                   null;

L'inconvénient de l'utilisation .Substring(est que vous devrez vérifier la longueur de la chaîne donnée.

Solution 2 (en utilisant 'Take'):

var firstFive = stringValue != null ? 
                    string.Join("", stringValue.Take(5)) : 
                    null;

L'utilisation de 'Take' vous évitera d'avoir à vérifier la longueur de la chaîne donnée.


13

Utilisez la fonction PadRight pour éviter que la chaîne ne soit trop courte, saisissez ce dont vous avez besoin puis coupez les espaces à la fin en une seule instruction.

strSomeString = strSomeString.PadRight(50).Substring(0,50).TrimEnd();

1
C'est la meilleure solution à ce jour. L'utilisation de Substring uniquement peut provoquer une erreur lorsque la longueur de la chaîne est inférieure à la longueur de la sous-chaîne.
Asiri Dissanayaka

meilleure alternative pour la fonction LEFT que nous utilisons dans SQL Server
vibs2006

11

Je ne sais pas pourquoi quelqu'un a mentionné cela. Mais c'est le moyen le plus court et le plus simple d'y parvenir.

string str = yourString.Remove(n);

n - nombre de caractères dont vous avez besoin

Exemple

var zz = "7814148471";
Console.WriteLine(zz.Remove(5));
//result - 78141

3
C'est en interne le même que "this.Substring (0, 5)", vous devez donc vous assurer que la chaîne a la bonne longueur.
PersyJack

Dans le cas où vous voulez les n premiers caractères, cela ne fonctionne que si vous connaissez la longueur de la chaîne. Si la longueur peut changer, cela ne fonctionnera pas toujours. Je sais que c'est probablement évident pour la plupart, mais le mentionner simplement pour quiconque passe par là ...
user1289451

10

Ajoutez cinq espaces blancs puis coupez les cinq premiers et coupez le résultat. Le nombre d'espaces que vous ajoutez doit correspondre au nombre que vous coupez. Assurez-vous d'inclure la parenthèse avant .Substring(0,X)ou vous n'ajouterez rien.

string str = (yourStringVariable + "    ").Substring(0,5).Trim();

Avec cette technique, vous n'aurez pas à vous soucier de ce qui est ArgumentOutOfRangeExceptionmentionné dans d'autres réponses.


1
darn j'allais poster ça !! voté. (on est en 2019, pourquoi n'y a-t-il pas de méthode sur chaîne qui fasse ce que Mid $ a fait en 1985? Pour ceux qui disent 'tu ne devrais pas faire ça' OK tu viens écrire mon code pour moi ... tu devras do it ...)
FastAl

7
string str = "GoodMorning"

string strModified = str.Substring(0,5);

2
erreur si la longueur de la variable "str" ​​est inférieure à 5
Moji

6

Juste un avertissement, il existe une nouvelle façon de faire cela dans C # 8.0: les opérateurs de plage

Microsoft Docs

Ou comme j'aime les appeler, des tranches de Pandas.

Ancienne façon:

string newString = oldstring.Substring(0, 5);

Nouvelle façon:

string newString = oldstring[..5];

Ce qui à première vue semble être un assez mauvais compromis entre une certaine lisibilité pour un code plus court, mais la nouvelle fonctionnalité vous donne

  1. une syntaxe standard pour découper les tableaux (et donc les chaînes)
  2. des trucs sympas comme ça:

    var slice1 = liste [2 .. ^ 3]; // liste [Range.Create (2, Index.CreateFromEnd (3))]

    var slice2 = liste [.. ^ 3]; // liste [Range.ToEnd (Index.CreateFromEnd (3))]

    var slice3 = liste [2 ..]; // liste [Range.FromStart (2)]

    var slice4 = liste [..]; // liste [Range.All]


3

Pour obtenir les n premiers caractères d'une chaîne en C #

String yourstring="Some Text";  
String first_n_Number_of_Characters=yourstring.Substring(0,n);

2

Vous trouverez ci-dessous une méthode d'extension qui vérifie si une chaîne est plus grande que ce qui était nécessaire et raccourcit la chaîne au nombre maximal de caractères défini et ajoute «...».

public static class StringExtensions
{
    public static string Ellipsis(this string s, int charsToDisplay)
    {
        if (!string.IsNullOrWhiteSpace(s))
            return s.Length <= charsToDisplay ? s : new string(s.Take(charsToDisplay).ToArray()) + "...";
        return String.Empty;
    }
}


1

J'utilise:

var firstFive = stringValue?.Substring(0, stringValue.Length >= 5 ? 5 : customAlias.Length);

ou alternative si vous souhaitez également vérifier les espaces blancs (au lieu de seulement Null):

var firstFive = !String.IsNullOrWhiteSpace(stringValue) && stringValue.Length >= 5 ? stringValue.Substring(0, 5) : stringValue

1

Ou vous pouvez utiliser String.ToCharArray () .
Il prend int startindexet et int lengthcomme paramètres et renvoie unchar[]

new string(stringValue.ToCharArray(0,5))

Vous devrez toujours vous assurer que la chaîne a la bonne longueur, sinon elle lancera un ArgumentOutOfRangeException


1

Veuillez essayer ce code lorsque str est inférieur à 5.

string strModified = str.Substring(0,str.Length>5?5:str.Length);

0

Si nous ne voulons que les 5 premiers caractères de n'importe quel champ, cela peut être réalisé par l'attribut gauche

Vessel = f.Vessel !=null ? f.Vessel.Left(5) : ""


-3

J'ai essayé les réponses ci-dessus et la meilleure que je pense est celle-ci

@item.First_Name.Substring(0,1)

En cela, je pourrais obtenir la première lettre de la chaîne

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.