C# 缩短 String/List 中的名称
C# Shortening names in String/List
为了在图表上填写轴,我需要限制输入的大小。您为图形提供一个字符串,每个类别在字符串中用逗号分隔。问题是,如果图形以特定大小呈现,字体就会开始重叠。我的字符串是一个名字列表,比如"John Smith, Steve Potatoes, Iron Man"。
我想动态地将其缩短为 "J Smith, S Potatoes, I Man"。这些名称也在字符串列表中,因此我也可以使用它。任何关于最佳方法的反馈都将不胜感激!
您可以使用 Regex 替换字符串以达到您的目的:
^([A-Z]).*?\s(.*?)$
并像这样使用它:
var name = "John Smith";
var pattern = @"^([A-Z]).*?\s(.*?)$";
var replaced = Regex.Replace(name, pattern, " "); //Output = J Smith
我假设您的案例只有名字和姓氏。要将正则表达式应用于您的列表,只需使用 foreach 循环:
var pattern = @"^([A-Z]).*?\s(.*?)$";
var shortenedList = new List<string>();
foreach (var name in stringList)
{
shortenedList.Add(Regex.Replace(name, pattern, " "));
}
首先你应该用逗号 (',') 分隔你的名字列表,你会得到一个列表 "Name Surname"
然后用空格 (' ') 分割每个列表项,然后 , 得到第一项的子字符串 (0,1) + "."和所有的第二项。你的名字是 "J. Smith"
要缩写每个名称的第一个单词...使用 .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);
为了在图表上填写轴,我需要限制输入的大小。您为图形提供一个字符串,每个类别在字符串中用逗号分隔。问题是,如果图形以特定大小呈现,字体就会开始重叠。我的字符串是一个名字列表,比如"John Smith, Steve Potatoes, Iron Man"。
我想动态地将其缩短为 "J Smith, S Potatoes, I Man"。这些名称也在字符串列表中,因此我也可以使用它。任何关于最佳方法的反馈都将不胜感激!
您可以使用 Regex 替换字符串以达到您的目的:
^([A-Z]).*?\s(.*?)$
并像这样使用它:
var name = "John Smith";
var pattern = @"^([A-Z]).*?\s(.*?)$";
var replaced = Regex.Replace(name, pattern, " "); //Output = J Smith
我假设您的案例只有名字和姓氏。要将正则表达式应用于您的列表,只需使用 foreach 循环:
var pattern = @"^([A-Z]).*?\s(.*?)$";
var shortenedList = new List<string>();
foreach (var name in stringList)
{
shortenedList.Add(Regex.Replace(name, pattern, " "));
}
首先你应该用逗号 (',') 分隔你的名字列表,你会得到一个列表 "Name Surname" 然后用空格 (' ') 分割每个列表项,然后 , 得到第一项的子字符串 (0,1) + "."和所有的第二项。你的名字是 "J. Smith"
要缩写每个名称的第一个单词...使用 .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);