Supposons que j'ai une chaîne:
"34234234d124"
Je veux obtenir les quatre derniers caractères de cette chaîne qui est "d124"
. Je peux l'utiliser SubString
, mais il a besoin de quelques lignes de code, y compris le nom d'une variable.
Est-il possible d'obtenir ce résultat en une seule expression avec C #?
4 > mystring.length ? mystring : mystring.Substring(mystring.length -4);
"hello world"[-4:]
. J'espère qu'une future version de C # le rendra aussi simple."hello world"[^4..]
:-)Réponses:
Si vous êtes certain que la longueur de votre chaîne est d'au moins 4, elle est encore plus courte:
la source
mystring
longueur est inférieure à 4 caractères.Vous pouvez utiliser une méthode d'extension :
Et puis appelez:
la source
Tout ce que tu dois faire est..
la source
Ok, donc je vois que c'est un vieux post, mais pourquoi réécrivons-nous du code qui est déjà fourni dans le framework?
Je suggérerais que vous ajoutiez une référence à la DLL du framework "Microsoft.VisualBasic"
la source
VisualBasic
espace de noms?TextFieldParser
est un autre exemple. Pourquoi ces utilitaires sont-ils si étrangement pris en compte?la source
L'utilisation de Substring est en fait assez courte et lisible:
la source
Voici une autre alternative qui ne devrait pas trop mal fonctionner (à cause d'une exécution différée ):
new string(mystring.Reverse().Take(4).Reverse().ToArray());
Bien qu'une méthode d'extension à cet effet
mystring.Last(4)
soit clairement la solution la plus propre, bien qu'un peu plus de travail.la source
Reverse().Take(4).Reverse()
chacun n'énumère pas la chaîne entière, cela ne se produit qu'au dernierToArray
appel. S'il n'existait pas une exécution différée, cela se traduirait parReverse().ToArray().Take(4).ToArray().Reverse().ToArray()
. Ceci, bien sûr, suppose que ces extensions sont du type différé - ce que je n'ai pas vérifié. Les constructeurs String n'acceptent pas IEnumerable, vous devez donc l'énumérer dans un tableau à ce stade.Vous pouvez simplement utiliser la
Substring
méthode de C #. Par exemple.Il renverra le résultat 0000.
la source
startIndex
?Une solution simple serait:
la source
la source
=
ne voulais pas=+
.C'est juste ça:
la source
Par rapport à certaines réponses précédentes, la principale différence est que ce morceau de code prend en considération lorsque la chaîne d'entrée est:
C'est ici:
la source
Définition:
Usage:
Résultat:
de
la source
Cela n'échouera pour aucune chaîne de longueur.
C'est probablement exagéré pour la tâche à accomplir, mais s'il doit y avoir une validation supplémentaire, elle peut éventuellement être ajoutée à l'expression régulière.
Edit: je pense que ce regex serait plus efficace:
la source
Utilisez un générique
Last<T>
. Cela fonctionnera avec TOUTIEnumerable
, y compris la chaîne.Et un spécifique pour la chaîne:
la source
J'ai jeté ensemble du code modifié à partir de diverses sources qui obtiendra les résultats que vous souhaitez, et en faire bien plus encore. J'ai autorisé des valeurs int négatives, des valeurs int qui dépassent la longueur de la chaîne et un index de fin inférieur à l'index de début. Dans ce dernier cas, la méthode renvoie une sous-chaîne d'ordre inverse. Il y a beaucoup de commentaires, mais faites-moi savoir si quelque chose n'est pas clair ou tout simplement fou. Je jouais avec ça pour voir à quoi je pourrais l'utiliser.
Donc, si vous avez une chaîne comme "Ceci est une méthode d'extension", voici quelques exemples et résultats à attendre.
J'espère que cette version est utile à quelqu'un. Il fonctionne comme d'habitude si vous n'utilisez pas de nombres négatifs et fournit des paramètres par défaut pour les paramètres hors plage.
la source
la source
en supposant que vous vouliez les chaînes entre une chaîne qui se trouve à 10 caractères du dernier caractère et que vous n'avez besoin que de 3 caractères.
Disons
StreamSelected = "rtsp://72.142.0.230:80/SMIL-CHAN-273/4CIF-273.stream"
Dans ce qui précède, je dois extraire le
"273"
que j'utiliserai dans la requête de base de donnéesla source
Substring
permet déjà de saisir un point de départ et une longueur, donc vous ne savez pas pourquoi vous n'utiliseriez pas cela plutôt queRemove
de supprimer le début en premier.Mise à jour 2020 : C # 8.0 rend enfin cela facile:
Vous pouvez également découper des tableaux de la même manière, voir Indices et plages .
la source