L'analyse d'une chaîne de caractères en C#; est-il le moyen le plus propre?
C#, .NET 3.5
Ça sent juste affreux pour moi, mais je ne peux pas penser à une autre façon.
Donné une chaîne de caractères au format "Joe Smith (jsmith)" (sans les guillemets), j'aimerais analyser seulement les "jdupont" chaîne à l'intérieur de la parenthèse. J'ai trouvé ceci:
private static string DecipherUserName( string user )
{
if( !user.Contains( "(" ) )
return user;
int start = user.IndexOf( "(" );
return user.Substring( start ).Replace( "(", string.Empty ).Replace( ")", string.Empty );
}
Autre que mon (onu)saine aversion pour la RegEx, est-il un moyen plus simple d'analyser la sous-chaîne?
Edit:
Pour clarifier, la chaîne à analyser seront toujours de "Joe Smith (jsmith)" (sans les guillemets).
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas besoin de la première remplacer puisque vous pouvez simplement ajouter 1 à l' "(" position.
Regexes sont donc utiles que vous économiserez de vous-même une tonne de chagrin mordre la balle et de leur apprentissage. Pas tout le toutim, juste l'essentiel.
Une regex qui va travailler est "\w+\((.*)\)" - jsmith serait dans le Match.Les groupes[1].
Un moyen facile de ramasser les regexes est de trouver un site qui va vous permettre de taper dans une regex et du texte, puis cracher les matchs...
Genre de bidouille ... ^^
Si
user
contient pas de parenthèse ouvrante,IndexOf()
retourne-1
, nous ajoutez-en un, obtenez zéro, etSubString()
retourne l'ensemble de la chaîne.TrimEnd()
n'aura aucun effet à moins que le nom de l'utilisateur se termine par une parenthèse fermante.Si
user
contient une parenthèse ouvrante,IndexOf()
retourne son index, nous skipp l'ouverture de la parenthèse par l'ajout de l'un, et d'en extraire le reste de la chaîne avecSubstring()
. Enfin, nous enlever la parenthèse fermante avecTrimEnd()
.Si l'utilisateur de la chaîne est toujours sous la forme "Joe Smith (jsmith)", cela devrait fonctionner.
Et si l'utilisateur de la chaîne est toujours "Joe Smith (jsmith)", ce le sera toujours.
La deuxième entrée de l'humour seulement.
Depuis le IndexOf fonction retourne -1 si la valeur n'existe pas, vous pourriez faire des choses un peu différente...
J'utiliserais
Mais c'est juste un changement cosmétique: à l'aide de caractères dans IndexOf est un peu plus rapide, et à l'aide de la méthode sous-Chaîne semble exprimer plus exactement ce qui doit être fait (et la méthode est plus robuste si vous avez plusieurs paires de parenthèses...)
Cela dit, Daniel L's de la méthode (à l'aide de
String.Split
) qui pourrait être plus simple (mais ne traitent pas très bien avec la malformation de chaînes de caractères et doit construire un tableau de chaîne).Dans l'ensemble, je vous suggère de surmonter votre aversion pour les expressions régulières, depuis que la situation est exactement ce qu'ils sont destinés 🙂 ...