Есть ли простой способ создать аббревиатуру из строки?
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


Я не знаю о языковом агностике, но я бы создал функцию, которая принимает параметр args [], чтобы ввести все ваши строки, а затем перебирать их и объединять первый символ каждого из них в другую строку, которая возвращается.
Обновлено: Ударьте это. Не понял, что это была единственная струна. Вам придется перебрать все символы в поисках специальных типов символов. Любые буквы после первой будут игнорироваться, пока вы не дойдете до пробела или специального символа.
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
Означает ли языковая независимость, что вам нужно использовать псевдокод? Если нет, то в Ruby:
"First_name-Middle_nameLast_name".gsub('-', ' - ').gsub(/\B[A-Z]+/, ' \&').split(' ').map { |s| s[0..0] }.join.upcase => "F-ML"
Если окажется, что нехватка места в третьем примере - опечатка, вы можете пропустить второй вызов gsub (с уродливым регулярным выражением).
Я выбрал ваш пример, потому что никогда бы не подумал, что трактую тире как отдельное слово.
Пример в JavaScript, предполагающий, что нехватка места перед Last в 3-м примере является опечаткой:
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);
}
Должно быть легко (?) Адаптироваться к другим языкам.
Это была опечатка, и я называл это простым способом!