【发布时间】:2016-01-04 12:37:58
【问题描述】:
我最近接到了一个新项目,将任何给定的字符串转换为 1-3 个字母的缩写。 下面是一个类似于我必须产生的东西的例子,但是给出的字符串可以是任何东西:
switch (string.Name)
{
case "Emotional, Social & Personal": return "ESP";
case "Speech & Language": return "SL";
case "Physical Development": return "PD";
case "Understanding the World": return "UW";
case "English": return "E";
case "Expressive Art & Design": return "EAD";
case "Science": return "S";
case "Understanding The World And It's People"; return "UTW";
}
我想我可以使用 string.Split 并计算数组中的单词数。然后添加处理特定长度字符串的条件,因为这些句子通常不会超过 4 个单词,但我会遇到的问题是。
- 如果一个字符串比我预期的长,它就不会被处理
- 必须从缩写中排除符号
任何关于我可以应用的逻辑的建议将不胜感激。 谢谢
【问题讨论】:
-
你好像忽略了《Understanding the World》中的“the”,但是却没有忽略《Understanding The World And It's People》中的“The”,是不是大写的原因?此外,您是否期望一组给定的输入被缩写,正如您的
switch似乎表明的那样,或者您是否希望输入是动态的?如果是前者,你最好使用Dictionary。 -
我会 string.Split 一个空格。遍历每个结果字符串,将它们与排除列表进行比较。如果它们不在其中,请取该单词的第一个字母并将其大写并继续前进。注意:替换任何可能在名称“_”“-”中使用的字符。
-
@ChrisHandy 这不适用于第四个或最后一个示例,因为两者都有工作“the”,但只有一个作为“T”。
-
是的,单词“the”由于大写而被忽略,输入将是动态的。我知道一些给定的字符串输入,该开关目前用作临时解决方案。 @juharr
-
是的,但您可以使用 Hashmap 或类似的东西来存储排除项。这样你检查字符串 x 是否存在于 hashmap 中(不需要遍历所有内容),如果不存在,那么你知道它是一个应该缩写的词。
标签: c# arrays string split logic