2016-12-15 3 views
0

У меня есть строка, которая содержит имя и фамилию, и я хотел бы разделить на две отдельные строки, так что я использовал этот код:Проверьте имя строка содержит имя и фамилию

string Delname = bkDel.ContactName; 
string[] Deltmp = Delname.Split(' '); 
string DelFirstName = Deltmp[0]; 
string DelLastName = Deltmp[1]; 

Это прекрасно работает, если это имя и фамилия, но это вызывает ошибку, если строка имени содержит только первое имя:

Индекс находился за пределами массива.

начиная с Deltmp[1] есть null.

Есть ли способ проверить строку имени, поэтому, если она содержит только одну строку, тогда не пытайтесь и не разделять?

+1

«Есть ли способ проверить строку с именем, так что если она содержит только одну строку, то не пытайтесь ее разделить?» - Просто проверьте результаты раскола, а не пытайтесь выяснить, следует ли разделить или нет. Проверьте длину массива, возвращаемого 'Split':' if (Deltmp.Length <2) 'или' if (Deltmp.Length == 1) ', а затем получите доступ только к элементу' [0] '. – Quantic

ответ

3

Вы можете проверить длину массива:

if (Deltmp.Length > 1) 
    //Assign to vars 

Или вы можете проверить, если входная строка содержит пробелы:

if (Delname.Contains(" ")) 
    //Do split 

Например:

string[] Deltmp = Delname.Split(' '); 
if (Deltmp.Length > 1) 
    //Assign to both 
else 
    //Assign to only one 
+0

@Quantic 'string.Split' не игнорирует начальные или конечные пробелы. Вы получите пустые строки, если не используете переопределение, которое берет 'StringSplitOptions' и передает' StringSplitOptions.RemoveEmptyEntries' – juharr

+0

@juharr. Вы правы, мой плохой. Спасибо за исправление. – Quantic

0

Вы можете использовать метод Delname.Trim(' ') для удаления пробелов от начала и до конца, а затем проверить строку с помощью Delname.Contains(" "))

1

Вы можете сделать простую проверку, как это.

if(Delname.Split(' ').Count() > 1) 
{ 
    // Has First and Last Name 
} 
else 
{ 
    // Has Single Name 
} 
+3

Пожалуйста, не добавляйте приветствия/подписи в конце вашего сообщения. –

+2

Пожалуйста, не включайте ваш сайт в качестве подписи. – Glorfindel

+0

Упс, удалив его. –

0

Как насчет проверки ввода с помощью регулярных выражений? Вот простой шаблон регулярных выражений, но вам может потребоваться более сложный, в зависимости от ваших поддерживаемых языковых требований.

Regex reg = new Regex(@"[A-Za-z]+ [A-Za-z]+"); 


string Delname = bkDel.ContactName; 
    Delname = Delname.Trim() 
    if (!reg.IsMatch(Delname)){ 
    // Don't split 
    return; 

} 
string[] Deltmp = Delname.Split(' '); 
string DelFirstName = Deltmp[0]; 
string DelLastName = Deltmp[1]; 
Смежные вопросы