2016-10-06 7 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 

фамилии Watson, но все между 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

Что делать, если у вас есть LastName, состоящий из двух частей? IE _MAC DONALD_? – Steve

+0

Сторона примечания - если вы хотите работать только с ненулевыми элементами, вам лучше отфильтровать их один раз и работать с отфильтрованным списком. Как бы то ни было, могут быть, скажем, 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-маркер и принимать 2 меньше, чем индекс (чтобы избежать фамилию и идентификационный жетон).

 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; 
     } 
    } 
Смежные вопросы