Как лучше всего вернуть первое слово строки в C #?
Обычно, если строка «привет, мир»
, мне нужно получить «привет»
.
Спасибо
Вы можете использовать комбинацию 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;
Один из способов — искать пробел в строке и использовать положение пробела для получения первого слова:
int index = s.IndexOf(' ');
if (index != -1) {
s = s.Substring(0, index);
}
Другой способ — использовать регулярное выражение для поиска граница слова:
s = Regex.Match(s, @"(.+?)\b").Groups[1].Value;
string words = "hello world";
string [] split = words.Split(new Char [] {' '});
if(split.Length >0){
string first = split[0];
}
Вы можете попробовать:
string s = "Hello World";
string firstWord = s.Split(' ').First();
Комментарий Охада Шнайдера верен, поэтому вы можете просто запросить элемент First()
, так как всегда будет как минимум один элемент.
Для получения дополнительной информации о том, следует ли использовать First()
или FirstOrDefault()
, вы можете узнать больше здесь
Ответ of Jamiec является наиболее эффективным, если вы хотите разделить только пробелы. Но, просто ради разнообразия, вот еще одна версия:
var FirstWord = "Hello World".Split(null, StringSplitOptions.RemoveEmptyEntries)[0];
В качестве бонуса она также распознает все виды экзотических пробельных символов и будет игнорировать несколько последовательных пробельных символов (фактически он обрезает начальные символы). /конечный пробел в результате).
Обратите внимание, что символы также будут считаться буквами, поэтому, если ваша строка имеет вид Hello, world!
, он вернет Здравствуйте,
. Если вам это не нужно, то передайте массив символов-разделителей в первом параметре.
Но если вы хотите, чтобы он был на 100 % надежным на всех языках мира, то это будет непросто...
Обрабатывает различные пробельные символы, пустую строку и строку из одного слова.
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();
}