Je veux savoir s'il y a un moyen facile d'obtenir uniquement des symboles de la chaîne sans couper les mots entiers.
Par exemple, j'ai des produits et des produits descriptions des informations. La longueur de description est de 70 à 500 symboles, mais je veux afficher uniquement les 70 premiers symboles comme celui-ci: P>
Coca-Cola est la boisson gazeuse la plus populaire et la plus grande vente à Histoire, ainsi que la marque la plus connue dans le monde. P>
Le 8 mai 2011, Coca-Cola a célébré ses 125 Enquête. Créé en 1886 à Atlanta, en Géorgie, par le Dr John S. Pemberton, Coca-Cola était premier offert comme une fontaine de boisson à la pharmacie de Jacob en mélangeant Sirop de coca-cola avec de l'eau gazeuse. P> blockQuote>
Donc, la méthode de Sub String ordinaire me donnera: P>
Coca-Cola is the most popular and biggest-selling soft drink in ...
6 Réponses :
s = "Coca-Cola is the most popular and biggest-selling soft drink in history, as well as the best-known brand in the world." s = s.split(" ").each_with_object("") {|x,ob| break ob unless (ob.length + " ".length + x.length <= 70);ob << (" " + x)}.strip #=> "Coca-Cola is the most popular and biggest-selling soft drink in"
Cette méthode utilise une regexp qui accroche à 70 caractères gênants et correspond ensuite à un espace ou à une extrémité de la chaîne pour atteindre votre objectif
Je passe du mal à comprendre cette solution. Pourriez-vous me dire ce qui se passe?
@JakeMith Nous faisons correspondre S String à potentiellement tronqué contre un motif Regexp. Le motif consiste en une clause de match gênée 1 à des répétitions maximales de tout caractère (. {1, # {max}}) code> en tant que groupe de capture, suivi d'une clause pour faire une correspondance non capture de l'un des caractères blancheurs ou de la fin de chaîne
(?: \ s | \ z) code>. Le
[1] code> sur le résultat du match extrait la première capture. Si cette capture est plus courte que la chaîne entière, cela ajoute les ellipses.
Remarque, cela pourrait ne pas fonctionner comme prévu lorsqu'il n'y a pas d'espace blanc ni de fin de chaîne dans les premiers caractères max. Par exemple. Truncate (S, 3) entraîne "Ola ..." plutôt que "col ..." ou peut-être juste "...". Si dans ce cas, vous préféreriez obtenir les premiers n caractères, puis voir la solution inspirée ci-dessous.
s = "Coca-Cola is the most popular and biggest-selling soft drink in history, as well as the best-known brand in the world." t = s[0..65].rpartition(" ").first << " ..." => "Coca-Cola is the most popular and biggest-selling soft drink in ..."
Sympa, mais si la phrase n'a pas d'espace, "..." serait retourné
Il suffit d'utiliser tronquacer l'option Séparateur: Obtenez plus d'informations à: tronquée assistant dans les rails Documentation API P> P>
'Il était une fois dans un monde loin loin'.Trunate (17, séparateur:' ')
(Inspiré de la réponse de Dbenhur mais mieux gère le cas où il n'y a pas d'espace blanc ni de fin de chaîne dans les premiers caractères max.)
b="Coca-Cola is the most popular and biggest-selling soft drink in history, as well " def truncate x a=x.split("").first(70).join w=a.split("").map!.with_index do |x,y| if x!=" " x=nil else x=y end end w.compact! index=w.last x.split("").first(index).join+" ..." end truncate b
Symboles? Voulez-vous dire "personnages"?