c#切片/分配变量

本文关键字:变量 分配 切片 | 更新日期: 2023-09-27 18:11:41

        String input;
        Console.WriteLine(":>");
        input = (Console.ReadLine());
        string[] column = input.Split(' ');
        int number_of_elements = column.Count(s => s != null);//counts the number of elements inputted
if (number_of_elements > 7 && column[0].ToLower() == "add") {
            **String firstName = column[1, number_of_elements-6];**
            String lastName = column[number_of_elements-5];
            String id_Clause = column[number_of_elements-4];
            String id_Number = column[number_of_elements-3];
            String as_Clause = column[number_of_elements-2];
            String as_Level = column[number_of_elements-1];
        }

我正在尝试制作一个c#程序,它接受这样的值

ADD Mary Jane Watson ID 123456 AS Advanced

我在试着做

            String firstName = Mary Jane;
            String lastName = Watson;
            String id_Clause = ID
            String id_Number = 123456
            String as_Clause = AS
            String as_Level = Advanced

姓Watson,但ADD和Watson之间的一切都是First name。

如果输入是

ADD Mary Jane Jennifer Watson ID 123456 AS Advanced

则结果为

            String firstName = Mary Jane Jennifer;
            String lastName = Watson;
            String id_Clause = ID
            String id_Number = 123456
            String as_Clause = AS
            String as_Level = Advanced

c#切片/分配变量

使用字符串。加入

例如:

firstName = String.Join(" ", column, 1, number_of_elements - 6);

您可以使用。split(' '),但由于您不知道名称的实际长度,并且您没有任何其他分隔符,因此这很困难。

你可以做的事情:

      String[] splitValues = "ADD Mary Jane Watson ID 123456 AS Advanced".Split(' ');
      String lastName = splitValues[splitValues.Length-5]
      String id_Clause = splitValues[splitValues.Length-4]
      String id_Number = splitValues[splitValues.Length-3]
      String as_Clause = splitValues[splitValues.Length-2]
      String as_Level = splitValues[splitValues.Length-1]

和第一个名字取其余的值,跳过第一个。

这只是一个例子,但我希望你能明白。此外,它不包括姓氏由多个部分组成的情况。

获取ID-token的索引

var s = input.Split(' ');
var indexID = Array.FindIndex(s, a => a == "ID");

要获得名字,跳过ADD-token,取比索引少2的值(以避免姓氏和ID-token)。

        string firstName = String.Join(" ", s.Skip(1).Take(indexID - 2));

同样使用索引来获取姓氏和idNumber

        string lastName = s[indexID - 1];
        string idNumber = s[indexID + 1];

级别是数组中的最后一个条目。

        string asLevel = s[s.Length - 1];

下面是一个完整的示例程序。

static void Main(string[] args)
        {
            string[] inputs = new string[] { "ADD Mary Jane Watson ID 123456 AS Advanced", "ADD Mary Jane Jennifer Watson ID 123456 AS Advanced" };
            foreach (string input in inputs)
            {
                Console.WriteLine(Extract(input).ToString());
            }
        }
        private static Person Extract(string input)
        {
            var s = input.Split(' ');
            var indexID = Array.FindIndex(s, a => a == "ID");
            string firstName = String.Join(" ", s.Skip(1).Take(indexID - 2));
            string lastName = s[indexID - 1];
            string idNumber = s[indexID + 1];
            string asLevel = s[s.Length - 1];
            return new Person()
            {
                FirstName = firstName,
                LastName = lastName,
                IDNumber = idNumber,
                ASLevel = asLevel
            };
        }

    }
    class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string IDNumber { get; set; }
        public string ASLevel { get; set; }
        public override string ToString()
        {
            return FirstName + " " + LastName + " " + IDNumber + " " + ASLevel;
        }
    }