Si j'ai l'expression "New York City", comment puis-je obtenir la première lettre de chaque mot? Mon googling m'a seulement montré comment capitaliser la première lettre de chaque mot, ce qui est apparemment différent de ce que j'essaie de faire. Compte tenu de ma connaissance limitée de Scala, je pourrais probablement faire cela de manière procédurale mais j'espérais que quelqu'un pourrait me parler de Scala et me montrer un exemple qui décrit une approche fonctionnelle de ce problème.Comment obtenir la première lettre de chaque mot dans scala?
Répondre
Toutes les autres versions fonctionnent bien, mais afin d'éviter l'échec avec des chaînes mal formatées (deux blancs dans une rangée, une chaîne vide), utilisez
"New York City".split(" ").flatMap(_.headOption).mkString
qui fonctionne aussi pour
"New York City".split(" ").flatMap(_.headOption).mkString
ou même
"".split(" ").flatMap(_.headOption).mkString
Comme suggéré par dhg, on peut vouloir utiliser une expression rationnelle plus appropriée telle que "\\s+"
ainsi. Mais on pourrait tout aussi bien utiliser quelque chose d'encore plus approprié:
"""\w+""".r.findAllIn("New York City").map(_.head).mkString
(Ici le /\w+/
devrait, espérons-nous épargner des cas pathologiques afin que nous puissions aller avec la version .head
.)
scala> "New York City".split(" ").map(_.head).mkString
res5: String = NYC
Ceci se sépare par "" en un tableau de mots. Ensuite, nous mappons sur ce tableau et appelons String.head qui obtient le premier caractère.
"New York City".split(" ").toList.map(_(0))
donne les personnages:
List[Char] = List(N, Y, C)
Si vous voulez une chaîne mkString
utiliser sur le List[Char]
:
"New York City".split(" ").toList.map(_(0)) mkString
pour obtenir:
String = NYC
"New York City".split(" ").map(_.charAt(0))
vous donnera un tableau de caractères
est ici une alternative à en utilisant split (Regex). L'astuce ici est d'utiliser zip pour permettre le test du caractère courant et précédent dans la même itération lorsque vous traversez la chaîne, les limites de mots sont constituées de n'importe quelle lettre précédée d'une non-lettre. Les deux cas spéciaux, la première et la dernière lettre, sont gérés par 1) en ajoutant un espace à une copie de la chaîne qui définit également le biais de 1 caractère requis pour le zip et 2) zip tronque les paires partielles.
val s = "\n1New\n\t \t \tYork --City\n\t"
def firstLetters(s: String) = {
" "+s zip s collect {case (w, c) if ! w.isLetter && c.isLetter => c}
}
firstLetters(s)
retours
Vector(N, Y, C)
- 1. Capitaliser la première lettre de chaque mot
- 2. ruby / regex obtenir la première lettre de chaque mot
- 3. jQuery capitilise la première lettre de chaque mot
- 4. Première lettre de chaque mot dans une colonne
- 5. Obtenir la première lettre de chaque mot dans une phrase, sauf quelques mots-clés
- 6. obtenir la première lettre de chaque mot dans une chaîne en utilisant Objective-C
- 7. Comment interroger la première lettre de chaque mot consécutivement dans sqlite?
- 8. Comment capitaliser la première lettre de chaque mot dans la chaîne
- 9. Android, besoin de faire dans ma listeVoir la première lettre de chaque mot majuscule
- 10. Expression régulière - Correspond à tous sauf la première lettre de chaque mot dans la phrase
- 11. preg_match pour vérifier la majuscule de la première lettre de chaque mot dans une chaîne
- 12. Comment mettre en majuscule la première lettre de chaque mot dans un tableau en C
- 13. comment saisir la première lettre de chaque entrée de tableau
- 14. Obtenez la première lettre de chaque mot dans une chaîne, en Javascript
- 15. Bug Javascript en capitalisant la première lettre de chaque mot dans Textarea
- 16. Affectation de la largeur de la première lettre du mot
- 17. Classe de caractères - Met en majuscule la première lettre de chaque mot dans une chaîne
- 18. Comment déplacer la première lettre d'un mot à la fin
- 19. Modification de la valeur de la première lettre de chaque mot
- 20. Comment faire la première lettre d'un mot en majuscule?
- 21. La première lettre est la lettre majuscule
- 22. linux trier uniquement par la première lettre de chaque ligne
- 23. obtenir une lettre d'un mot
- 24. Changer la première lettre d'un mot en majuscule
- 25. PHP obtenir la lettre
- 26. vérifier si la première lettre d'un mot est une voyelle
- 27. tri par la première lettre
- 28. Comment capitaliser la première lettre de chaque mot dans une chaîne et changer tous les espaces de soulignement en JavaScript
- 29. première lettre en majuscule de chaque mot, sauf pour les URL
- 30. ordre alphabétique obtenir la première et le dernier mot
' "New York City" .split ("\\ s +") carte. (_. Tête).mkString' accomplit le même but sans le 'Option'. – dhg
@dhg ... mais échoue sur la chaîne vide. – Debilski
vous pouvez filtrer les résultats vides, en n'en conservant que les valides, ce qui vous permettra d'utiliser la méthode '_.head':' "New York City" .split ("") .filterNot (_. IsEmpty) .map (_ .head) .mkString' –