2012-06-03 4 views
13

Интересно, если это возможно, чтобы использовать разделение на разделим строку с несколькими частями, разделенными запятой, например:Разбивает строку и получить первое значение только

title, genre, director, actor 

Я просто хочу первую часть, то название каждой строки, а не остальное?

ответ

42
string valueStr = "title, genre, director, actor"; 
var vals = valueStr.Split(',')[0]; 

Vals даст вам название

+3

Это своего рода очевидный путь ... Но на самом деле, вы хотите выполнить разбивку по всей строке, чтобы получить первую часть? Представьте, если строка была длинной и если операция выполнялась много раз за время жизни программы и, возможно, даже в цикле для всех записей. – SimpleVar

17

На самом деле, есть лучший способ сделать это, чем раскол:

public string GetFirstFromSplit(string input, char delimiter) 
{ 
    var i = input.IndexOf(delimiter); 

    return i == -1 ? input : input.Substring(0, i); 
} 

И как методы расширения:

public static string FirstFromSplit(this string source, char delimiter) 
{ 
    var i = source.IndexOf(delimiter); 

    return i == -1 ? source : source.Substring(0, i); 
} 

public static string FirstFromSplit(this string source, string delimiter) 
{ 
    var i = source.IndexOf(delimiter); 

    return i == -1 ? source : source.Substring(0, i); 
} 

Использование:

string result = "hi, hello, sup".FirstFromSplit(','); 
Console.WriteLine(result); // "hi" 
+0

Это будет возвращать строку или символ []? – ivowiblo

+0

@ivowiblo Хорошая точка. Я починил это. Изменить: Фактически удалено, потому что методы расширения намного лучше и лучше. – SimpleVar

+0

Разве вы не написали простой способ использования split в комментарии? –

5

Вы можете сделать это:

var str = "Doctor Who,Fantasy,Steven Moffat,David Tennant"; 

var title = str.Split(',').First(); 

Кроме того, вы можете сделать это следующим образом:

var index = str.IndexOf(","); 
var title = index < 0 ? str : str.Substring(0, index); 
+0

Второй будет терпеть неудачу, если строка не содержит «,» - хотя split будет возвращать массив размером 1, содержащий весь строка. – SimpleVar

+0

правый, фиксирующий его ... – ivowiblo

+0

И снова, почему 'string.Empty'?Кодер ожидает, что вся строка будет возвращена, так же как вся строка появится в 'splitResult [0]' (также причина для изменения 'FirstOrDefault()' просто '[0]', потому что массив всегда будет иметь по крайней мере, один элемент). – SimpleVar

Смежные вопросы