2016-10-06 73 views
0
 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#程序,需要這樣的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 

姓氏沃特森,但之間的一切值ADD和Watson作爲名字。

因此,如果輸入的是

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 
+0

如果您的姓氏由兩部分組成,該怎麼辦? IE _MAC DONALD_? – Steve

+0

備註 - 如果你只想使用非null元素,你最好過濾一次,並使用過濾列表。實際上,可能有8個非空元素,但不能保證,例如'number_of_elements - 3'將訪問非空元素。 –

回答

2

使用String.Join

喜歡的東西:

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

他們想要跳過'column [0]'因爲我們已經確定它是單詞'add'而不是名字的一部分。 –

0

你可以使用.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] 

和名字取剩餘值,跳過第一。這是ADD。

這只是一個例子,但我希望你明白這一點。此外,它不涵蓋姓氏由多個部分組成的情況。

0

獲取ID令牌的索引。

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

要得到名字,跳過ADD-token並取2小於索引(以避免姓和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]; 

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

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; 
     } 
    }