C#缩短String / List中的名称

时间:2015-03-06 14:27:23

标签: c# string list parsing

为了在图表上填写轴,我需要限制输入的大小。您为图形提供了一个字符串,每个类别用字符串中的逗号分隔。问题是,如果图形以特定大小呈现,则字母开始重叠。我的字符串是名单,例如“John Smith,Steve Potatoes,Iron Man”。

我喜欢动态地将它缩短为“J Smith,S Potatoes,I Man”。这些名称也在字符串列表中,所以我也可以使用它。任何关于最佳方式的反馈都将不胜感激!

3 个答案:

答案 0 :(得分:1)

您可以使用Regex替换字符串以用于您的目的:

^([A-Z]).*?\s(.*?)$

并像这样使用它:

var name = "John Smith";
var pattern = @"^([A-Z]).*?\s(.*?)$";
var replaced = Regex.Replace(name, pattern, "$1 $2"); //Output = J Smith 

我假设您的案件只有姓名和姓氏。要将Regex应用于列表,只需使用foreach循环:

var pattern = @"^([A-Z]).*?\s(.*?)$";
var shortenedList = new List<string>();
foreach (var name in stringList)
{
   shortenedList.Add(Regex.Replace(name, pattern, "$1 $2"));
}

答案 1 :(得分:1)

首先,您应该用逗号(&#39;,&#39;)拆分您的名单,然后您会得到一个列表&#34;名称姓氏&#34; 然后用空格分割每个列表项(&#39;&#39;),然后,得到第一项&#39; s子串(0,1)+&#34;。&#34;以及所有第二项。而你的名字是&#34; J。史密斯&#34;

答案 2 :(得分:1)

缩写每个名字的第一个单词...使用.Split()然后.Substring()将名称拆分为其部分,以缩写您的喜好,例如

string name = "John Smith";

string[] nameParts = name.Split(' ');

nameParts[0] = nameParts[0].Substring(0, 1);

string abbrName = String.Join(" ", nameParts);

Console.WriteLine(abbrName);