Каков наилучший способ вернуть первое слово строки в C#?Функция левой строки в C#
В принципе, если строка "hello world"
, мне нужно получить "hello"
.
Благодаря
Каков наилучший способ вернуть первое слово строки в C#?Функция левой строки в C#
В принципе, если строка "hello world"
, мне нужно получить "hello"
.
Благодаря
Вы можете использовать комбинацию Substring
и IndexOf
.
var s = "Hello World";
var firstWord = s.Substring(0,s.IndexOf(" "));
Однако, это не даст ожидаемого слова, если входная строка имеет только одно слово, так что особый случай необходимости.
var s = "Hello";
var firstWord = s.IndexOf(" ") > -1
? s.Substring(0,s.IndexOf(" "))
: s;
Я бы добавил специальный случай, если строка содержит только одно слово, например. если ** IndexOf ** возвращает -1. –
string words = "hello world";
string [] split = words.Split(new Char [] {' '});
if(split.Length >0){
string first = split[0];
}
split.Length. Stack Overflow не позволит мне редактировать его. – crh225
Один из способов состоит в поиске пространства в строке, и использовать положение пространства, чтобы получить первое слово:
int index = s.IndexOf(' ');
if (index != -1) {
s = s.Substring(0, index);
}
Другой способ заключается в использовании регулярного выражения искать границы слова:
s = Regex.Match(s, @"(.+?)\b").Groups[1].Value;
Вы можете попробовать:
string s = "Hello World";
string firstWord = s.Split(' ').First();
Ohad Schneider's комментарий является правильным, поэтому вы можете просто запросить элемент First()
, так как всегда будет хотя бы один элемент.
Для получения дополнительной информации о том, чтобы использовать First()
или FirstOrDefault()
вы можете узнать больше here
Небольшое улучшение: используйте перегруз для 'String.Split', который принимает максимальное количество расщеплений, поскольку вам все равно, кроме первого раздела. – Richard
Вам не нужно 'FirstOrDefault', всегда будет хотя бы один элемент, поэтому вы можете просто написать' First' (даже если нет места, вы получите всю строку). –
Ваше решение правильно, нет необходимости «пытаться». – Heinzi
answer of Jamiec является наиболее эффективным, если вы хотите разделить только на пространствах. Но, ради разнообразия, вот еще одна версия:
var FirstWord = "Hello World".Split(null, StringSplitOptions.RemoveEmptyEntries)[0];
В качестве бонуса это также будет распознавать all kinds of exotic whitespace characters и проигнорирует несколько последовательных пробельных символов (в действительности он обрезает начальные/конечные пробелы из результата) ,
Обратите внимание: он будет считать символы буквами, поэтому, если ваша строка Hello, world!
, она вернет Hello,
. Если вам это не нужно, то передайте массив разделителей в первом параметре.
Но если вы хотите, чтобы это было 100% защиты на всех языках мира, то это будет жестко ...
бессовестно украдены с сайта MSDN (http://msdn.microsoft.com/en-us/library/b873y76a.aspx)
string words = "This is a list of words, with: a bit of punctuation" +
"\tand a tab character.";
string [] split = words.Split(new Char [] {' ', ',', '.', ':', '\t' });
if(split.Length > 0)
{
return split[0];
}
Обрабатывает различные символы пробелов, пустую строку и строку одного слова.
private static string FirstWord(string text)
{
if (text == null) throw new ArgumentNullException("text");
var builder = new StringBuilder();
for (int index = 0; index < text.Length; index += 1)
{
char ch = text[index];
if (Char.IsWhiteSpace(ch)) break;
builder.Append(ch);
}
return builder.ToString();
}
Вместо того чтобы делать Split
для всех струны, Ограничьте Split сосчитать 2. Используйте перегрузку, которая также учитывает значение параметра.Используйте String.Split Method (Char[], Int32)
string str = "hello world";
string firstWord = str.Split(new[]{' '} , 2).First();
Split
всегда будет возвращать массив с, по меньшей мере, один элемент, так как .[0]
или First
достаточно.
Я использовал эту функцию в своем коде. Он предоставляет возможность либо заглавничать первое слово, либо каждое слово.
public static string FirstCharToUpper(string text, bool firstWordOnly = true)
{
try
{
if (string.IsNullOrEmpty(text))
{
return text;
}
else
{
if (firstWordOnly)
{
string[] words = text.Split(' ');
string firstWord = words.First();
firstWord = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(firstWord.ToLower());
words[0] = firstWord;
return string.Join(" ", words);
}
else
{
return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text.ToLower());
}
}
} catch (Exception ex)
{
Log.Exc(ex);
return text;
}
}
Является ли пространство единственным персонажем, которого вы хотите разделить словами? Как насчет возврата вкладки, новой строки и каретки? – cwap
расширение комментария cwap: как насчет пунктуации? "Привет мир"? – lalli