我正在查找包含一个列中包含多个名称列表的.txt文件,它们列出如下:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
我只想保留每个名字的首字母,并将它们添加到另一个列表中,例如:
姓氏中间名称:=>兰姆
我必须用空格分开吗?或使用几个删除?还是使用RegEX? 谢谢!
答案 0 :(得分:3)
var result = File.ReadAllLines("text.txt")
.Select(line => new string (line.Split(' ')
.Select(s => s.First())
.ToArray())
).ToList();
修改:
从姓氏中获取两个字母:
var result = File.ReadAllLines("text.txt").Select(line =>
{
var words = line.Split(' ');
var la = words.First().Take(2);
var mn = words.Skip(1).Select(s => s.First());
return new string(la.Concat(mn).ToArray()).ToUpper();
}
).ToList();
结果为:LAMN
答案 1 :(得分:2)
public List<Person> ParseFile(string filePath)
{
List<Person> lp = new List<Person>();
using (StreamReader sr = new StreamReader(filePath))
{
while (!sr.EndOfStream)
{
lp.Add(new Person(sr.ReadLine()));
}
}
return lp;
}
使用
class Person
{
public Person(string fullName)
{
this.fullName = fullName;
}
private string fullName;
public string FullName
{
get { return fullName; }
set { fullName = value; }
}
private string initials;
public string Initials
{
get { return String.Join("",new string[]{
String.Join("",fullName.Split(new char[] { ' ' }).Take(1).Select(i => i.Substring(0, 2))),
String.Join("",fullName.Split(new char[] { ' ' }).Skip(1).Select(i => i.Substring(0, 1)))
});
set { initials = value; }
}
}
答案 2 :(得分:1)
首先我要制作一个Person类:
public class Person
{
string _initials = "";
public String FirstName { get; set; }
public String LastName { get; private set; }
public String MiddleName { get; private set; }
public String Initials { get { return _initials; } }
public String FullName { get { return FirstName + MiddleName + LastName; } }
public Person(String name)
{
string[] names = name.Split(' ');
if (names.Length != 3)
{
throw new ArgumentException("Incorrect format for a person.");
}
FirstName = names[2];
MiddleName= names[1];
LastName = names[0];
_initials =
String.Concat(LastName[0],LastName[1],MiddleName[0],FirstName[0]);
}
}
然后使用文件填充Person类:
List<Person> personsList = new List<Person>();
using (StreamReader reader = new StreamReader(filePath))
{
while (!reader.EndOfStream)
{
Person p = new Person(reader.ReadLine());
personsList.Add(p);
}
}
然后你可以访问Person的第一个,最后一个和中间名以及它们的首字母:
foreach(Person p in personsList)
{
Console.WriteLine(p.Initials);
}
答案 3 :(得分:0)
可能它不是一个完整的问题解决方案,但我认为更好的方法是在不使用LINQ的情况下获得首字母。