2009-06-09 2 views

ответ

9
YOUR_STRING.Split('_')[0]

На самом деле метод Split возвращает массив строк, в результате расщепления исходной строки в любом вхождения указанного символа (ов), а не в том числе характера, при котором расщепленном был выполнен.

+0

Как отметил Марк, это очень неэффективный способ сделать это. –

+0

Это самый простой способ сделать это, наиболее интуитивно понятным и, если приложение не критично, и повторяет эту операцию снова и снова, это не имеет большого значения. В любом случае я согласен, что это не решение с наименьшим временем выполнения :) – em70

+0

не забудьте добавить некоторую проверку, что в строке есть фактическое значение «_», если вы делаете это динамически позже :-) –

1

("WORD1_WORD2_WORD3").Split('_')[0]

должен вернуть "Слово1". Если он не работает, попробуйте .Spilt() в строковой переменной с указанным Контентом.

string str="WORD1_WORD2_WORD3"; 
string result=str.Split('_')[0]; 

Это фактически возвращает массив:

{"WORD1", "WORD2", "WORD3"} 
+0

Вам не нужно скобки вокруг строки, вы можете просто сделать "" .Split ('_') [0]; –

0

Есть несколько способов. Вы можете использовать Split, Substring. и т. д. Пример с Split:

Строка var = "WORD1_WORD2_WORD3";

Строковый результат = var.Split ('_') [0];

10

Возможно, возникает соблазн сказать Split, но это связано с созданием массива и множеством отдельных строк. ИМО, оптимальный путь здесь, чтобы найти первый символ подчеркивания, и взять подстроку:

string b = s.Substring(0, s.IndexOf('_')); // assumes at least one _ 

(редактировать)

Если вы делаете это много, вы могли бы добавить некоторые методы расширения:

public static string SubstringBefore(this string s, char value) { 
    if(string.IsNullOrEmpty(s)) return s; 
    int i = s.IndexOf(value); 
    return i > 0 ? s.Substring(0,i) : s; 
} 
public static string SubstringAfter(this string s, char value) { 
    if (string.IsNullOrEmpty(s)) return s; 
    int i = s.IndexOf(value); 
    return i >= 0 ? s.Substring(i + 1) : s; 
} 

затем:

string s = "a_b_c"; 
string b = s.SubstringBefore('_'), c = s.SubstringAfter('_'); 
+0

хорошая вещь, которую вы добавили свой комментарий :) –

7

если s является строка :

int idx = s.IndexOf('_'); 

if (idx >= 0) 
    firstPart = s.Substring(0,idx); 
+0

+1, потому что у нас нет проблем, которые могут возникнуть .Split() –

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