9
votes

moyen le plus court d'obtenir le premier char de chaque mot dans une chaîne

Je veux un moyen le plus court d'obtenir 1er caractère de chaque mot dans une chaîne en c #.

Ce que j'ai fait est: xxx

Je veux afficher la même chose Sortie avec un moyen le plus court ...

merci


2 commentaires

Eh bien, c'est à peu près le moyen le plus court.


En fait, je ne vois rien de mal avec cette méthode. C'est lisible et fait ce qu'il dit sur la boîte. Pourquoi voulez-vous plus court? Juste parce que quelque chose est plus court ne signifie pas que c'est lisible ou évident à ce que vous faites. Ce que vous avez ici n'a même pas besoin de commentaire.


7 Réponses :


20
votes
var firstChars = str.Where((ch, index) => ch != ' ' 
                       && (index == 0 || str[index - 1] == ' '));

1 commentaires

Utilisez .split ("", stringsplitoptions.remoPeemptyentries) plutôt pour éviter les erreurs sur plusieurs espaces.



1
votes

Je pense que votre solution est parfaitement bien, mais si vous voulez de meilleures performances, vous pouvez essayer:

str result = str.Split(" ").Select(y => y[0]).ToList();


2 commentaires

Vous aurez un problème si la chaîne commence par ''.


Oui ... j'ai ajouté une note de réservation pour cela.



14
votes
string str = "This is my style"; 
str.Split(' ').ToList().ForEach(i => Console.Write(i[0] + " "));

1 commentaires

Utilisation de Array.foreach (str.split (''), s => console.write (s [0] + "")); serait légèrement plus court et plus rapide. Vous voudrez peut-être aussi utiliser stringsplitoptions.removeemptyentries pour gérer la situation où la chaîne commence par un espace ou contient des espaces consécutifs.



4
votes

Les expressions régulières pourraient être la réponse:

  Regex.Matches(text, @"\b(\w{1})")
    .OfType<Match>()
    .Select(m => m.Groups[1].Value)
    .ToArray();


0 commentaires

3
votes

Imprimer la première lettre de chaque mot dans une chaîne xxx

sortie: xxx


0 commentaires

0
votes

Pour moi, cela fonctionnait mieux que les autres et toujours très flexibles: xxx


2 commentaires

Comment c'est mieux que les autres si c'est la même réponse, mais avec une jointure?


@Leandro: Il vaut mieux que «simple folk» comme moi qui recherchent une méthode pour obtenir une abréviation pour un nom (John Doe => JD). Mais vous êtes correct, dans l'essence de la question, il n'y a rien de nouveau ou meilleur.



0
votes

Je travaille avec une liste à l'aide de la considération de Luchh. XXX


0 commentaires