自动缩写创建

时间:2008-10-23 20:45:12

标签: string language-agnostic

有没有简单的方法可以从字符串创建首字母缩略词?

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

4 个答案:

答案 0 :(得分: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 :(得分:1)

语言不可知意味着您必须使用伪代码吗?如果没有,那么在Ruby中:

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

如果事实证明第三个例子中缺少空格是一个拼写错误,你可以跳过第二次调用gsub(使用丑陋的正则表达式。)

答案 2 :(得分:1)

JavaScript中的示例,假设在第3个示例中的Last之前缺少空格是一个错字:

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);
}

应该很容易(?)适应其他语言。

答案 3 :(得分:0)

我不知道语言不可知,但我会创建一个接受args []参数的函数来引入所有字符串,然后遍历这些字符串并将每个字符串的第一个字符串连接到另一个返回的字符串上。

编辑:罢工。没有意识到这是一个单一的字符串。您必须遍历所有寻找特殊字符类型的字符。第一个之后的任何字母都会被忽略,直到你找到一个空格或特殊字符。