2008-10-23 12 views
0

Existe-t-il un moyen simple de créer un acronyme à partir d'une chaîne?Création automatique d'acronymes

First_name Middle_name Last_name => FML 
first_name middle_name last_name => FML 
First_name-Middle_name Last_name => F-ML 
first_name-middle_name last_name => F-ML 

Répondre

1

Est-ce que le langage agnostique signifie que vous devez utiliser le pseudo-code? Sinon, en Ruby:

"First_name-Middle_nameLast_name".gsub('-', ' - ').gsub(/\B[A-Z]+/, ' \&').split(' ').map { |s| s[0..0] }.join.upcase => "F-ML"

S'il se trouve le manque d'espace dans le troisième exemple est une faute de frappe, vous pouvez sauter le deuxième appel à gsub

+0

C'était une faute de frappe, et c'était ce que j'appelais un moyen facile! –

+0

J'ai choisi votre exemple parce que je ne penserais jamais à traiter le tiret comme un seul mot. –

0

Je ne sais pas la langue agnostique, mais je voudrais faire une fonction qui accepte un paramètre args [] pour apporter toutes vos chaînes puis boucle à travers ceux-ci et concaténer le premier caractère de chaque sur une autre chaîne qui est retourné.

Modifier: grève que. Je n'avais pas réalisé que c'était une seule corde. Vous devez parcourir tous les caractères recherchant des types de caractères spéciaux. Toutes les lettres après la première seraient ignorées jusqu'à ce que vous obteniez un espace ou un caractère spécial.

2
Tokenize the string on whitespace. 
For each token1, 
    Tokenize on dash. 
    For each token2 
    Take token2[0] and capitalize 
    if not first token2, prepend with dash 
    Concatenate to result2 
    Concatenate to result 
1
(avec le regexp laid.)

exemple en JavaScript, en supposant que le manque d'espace avant la dernière 3ème exemple est une faute de frappe:

var testStrings = [ 
'First_name Middle_name Last_name', 
'first_name middle_name last_name', 
'First_name-Middle_name Last_name', 
'first_name-middle_name last_name' 
]; 
var re = /\b(\w)\w*\b(-?)\s*/g; 
var mr; 
for (var i = 0, l = testStrings.length; i < l; i++) 
{ 
    var name = testStrings[i]; 
    var abbr = name.replace(re, function (match, ini, dash) 
    { 
    return ini.toUpperCase() + dash; 
    }); 
    alert(abbr); 
} 

doit être facile à adapter à d'autres langues (?).