5 votes

Quelle est la meilleure façon de séparer une chaîne en utilisant la fonction string.format() ou LINQ ?

Y a-t-il un moyen de changer "ABCDEFGHIJKLMNOP" en "ABCD-EFGH-IJKL-MNOP" en utilisant la fonction string.format() ou peut-être LINQ ?
Je suis en train d'utiliser cette déclaration

Out= String.Format("{0}-{1}", String.Format("{0}-{1}-{2}", In.Substring(0, 4), In.Substring(4, 4), In.Substring(8, 4)), In.Substring(12, 4));  

y a-t-il un moyen meilleur et plus clair d'accomplir cela?

10voto

Oded Points 271275

Vous pourriez utiliser string.Format, mais vous devriez toujours utiliser SubString pour obtenir les différentes parties.

Vous devriez probablement simplement utiliser Insert:

string result = myString.Insert(12, "-").Insert(8, "-").Insert(4, "-");

LINQ est un peu trop complexe pour ce genre de tâche.

9voto

Øyvind Bråthen Points 25211

Il est vraiment facile de le faire sans LINQ ou string.format, donc je vous suggère d'utiliser ce code à la place :

string s = "ABCDEFGHIJKLMNOP";
for( int i = 4; i < s.Length; i += 5){
  s = s.Insert(i, "-");
}

Cela va insérer un tiret après chaque 4 caractères (j'ai supposé que c'est ce que vous vouliez).

3voto

KooKiz Points 19056

Just for fun, in Linq:

string result = input.Select((c, i) => i > 0 && i % 4 == 0 ? "-" + c : c.ToString())
                .Aggregate((s1, s2) => s1 + s2);

Of course, I wouldn't recommand using Linq in this case, as a 'classical' solution would be more efficient AND more readable.

Still, I enjoyed writing this one :D

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X