У меня есть строка: например. WORD1_WORD2_WORD3
Извлечение первого токена из строки delimeted
Как я могу получить только WORD1 из строки? т.е. текста перед первым подчеркиванием
У меня есть строка: например. WORD1_WORD2_WORD3
Извлечение первого токена из строки delimeted
Как я могу получить только WORD1 из строки? т.е. текста перед первым подчеркиванием
YOUR_STRING.Split('_')[0]
На самом деле метод Split возвращает массив строк, в результате расщепления исходной строки в любом вхождения указанного символа (ов), а не в том числе характера, при котором расщепленном был выполнен.
("WORD1_WORD2_WORD3").Split('_')[0]
должен вернуть "Слово1". Если он не работает, попробуйте .Spilt() в строковой переменной с указанным Контентом.
string str="WORD1_WORD2_WORD3";
string result=str.Split('_')[0];
Это фактически возвращает массив:
{"WORD1", "WORD2", "WORD3"}
Вам не нужно скобки вокруг строки, вы можете просто сделать "" .Split ('_') [0]; –
Есть несколько способов. Вы можете использовать Split, Substring. и т. д. Пример с Split:
Строка var = "WORD1_WORD2_WORD3";
Строковый результат = var.Split ('_') [0];
Возможно, возникает соблазн сказать 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('_');
хорошая вещь, которую вы добавили свой комментарий :) –
если s является строка :
int idx = s.IndexOf('_');
if (idx >= 0)
firstPart = s.Substring(0,idx);
+1, потому что у нас нет проблем, которые могут возникнуть .Split() –
Как отметил Марк, это очень неэффективный способ сделать это. –
Это самый простой способ сделать это, наиболее интуитивно понятным и, если приложение не критично, и повторяет эту операцию снова и снова, это не имеет большого значения. В любом случае я согласен, что это не решение с наименьшим временем выполнения :) – em70
не забудьте добавить некоторую проверку, что в строке есть фактическое значение «_», если вы делаете это динамически позже :-) –