获取列c#的首字母

时间:2012-09-20 15:07:50

标签: c# string removing-whitespace

我正在查找包含一个列中包含多个名称列表的.txt文件,它们列出如下:

Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:
Lastname Middlename Name:

我只想保留每个名字的首字母,并将它们添加到另一个列表中,例如:

姓氏中间名称:=>兰姆

我必须用空格分开吗?或使用几个删除?还是使用RegEX? 谢谢!

4 个答案:

答案 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的情况下获得首字母。

Regex to extract initials from Name