繁体   English   中英

c# 中的字符串拆分

[英]String splitting in c#

所以这就是事情。 我在 c# 中有分配,它说我有字符串:

string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow".

我需要拆分此字符串以获取名称、姓氏和城市...然后我需要创建 3 个对象类型Person 我需要将 3 个对象放入 1 Person[] 数组中,最后我需要通过该数组 go 并打印此人的信息。 结果应如下所示:

约翰戴维森贝尔格莱德

迈克尔巴顿克拉科夫

伊万·珀金森 莫斯科

我试图创建一个可以工作的代码,但我无法完成。 我成功了,但我不知道如何完成。 我不知道我是否做对了,但如果我做对了,我不知道如何将这个拆分的字符串与我写的 class 连接起来。 请帮忙。

这是代码:

    {
        string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow ";
        string[] strings = text.Split(new char[] {'.','/',' '});
        foreach(string s in strings)
        {
            Console.WriteLine(s);
        }

    }
    class Person
    {      
        public string Name;
        public string Surname;
        public string City;
        public Person(string name, string surname, string city)
        {
            Name = name;
            Surname = surname;
            City = city;
        }
    }

我不会像你那样拆分它。 规则似乎很明确:

  • 每个人都被一个空的空间隔开
  • 名字和姓氏与城市之间用 / 隔开
  • 名字和姓氏由分隔。

因此,您需要三个String.Split和一个可以填充的List<Person>

string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow ";
string[] persons = text.Split(' ', StringSplitOptions.RemoveEmptyEntries); // you can also `Trim` the string first
List<Person> personList = new List<Person>(persons.Length);
foreach(string p in persons)
{
    string[] nameCity = p.Split('/');
    string[] names = nameCity[0].Split('.');
    personList.Add(new Person(names[0],names.ElementAtOrDefault(1),nameCity.ElementAtOrDefault(1)));
}

您可以通过简单的步骤来做到这一点。

var text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow ";
var names = text.Split(' '); // first split persons
var persons = new List<Person>();
            
foreach(var name in names) // for each person
{
    var country = name.Substring(name.IndexOf('/') + 1); // cut country by /
    var nameArr = name.Substring(0, name.IndexOf('/')).Split('.'); // cut and split first name and last name
    
    persons.Add(new Person(nameArr[0], nameArr[1], country));
}

这是您的解决方案

Person[] personArray = new Person[3];
            string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow ";
            string[] persons = text.Split(new char[] { ' ' });
            int i = 0;
            foreach (string ss in persons)
            {
                if (!string.IsNullOrEmpty(ss))
                {
                    string[] detailofPerson = ss.Split(new char[] { '.', '/' });
                    Person person = new Person(detailofPerson[0], detailofPerson[1], detailofPerson[2]);
                    personArray[i] = person;
                    i++;
                    Console.WriteLine(ss);
                }
            }

我告诉你这个。 如果您采用这种方式一次拆分,并且保证名称中没有空格、缺少城市等,请使用数学

string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow ";
string[] people = text.Split(new char[] {'.','/',' '});
for(int i = 0; i < people.Length - 3; i += 3)
{
    Console.WriteLine(people[i]);
    Console.WriteLine(people[i + 1]);
    Console.WriteLine(people[i + 2]);
    Console.WriteLine("---------");

    var person = new Person(people[i], people[i + 1], people[i + 2]);
    . . . . . 
}

或使用命名元组进行测试。 或者直接将people[x]插入person

for(int i = 0; i < people.Length - 3; i += 3)
{
    (string Name, string LName, string City) tempPerson = (people[i], people[i + 1], people[i + 2]);
    Console.WriteLine(tempPerson); // test

    var person = new Person(tempPerson.Name, tempPerson.LName, tempPerson.City);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM