Левая строка в С#

Какой лучший способ вернуть первое слово строки в С#?

В принципе, если строка "hello world", мне нужно получить "hello".

Спасибо

Ответы

Ответ 1

Вы можете использовать комбинацию 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;

Ответ 2

Вы можете попробовать:

string s = "Hello World";
string firstWord = s.Split(' ').First();

Комментарий Охада Шнайдера, так что вы можете просто попросить элемент First(), поскольку всегда будет хотя бы один элемент.

Для получения дополнительной информации о том, следует ли использовать First() или FirstOrDefault(), вы можете узнать больше здесь

Ответ 3

Одним из способов является поиск пробела в строке и использование положения пространства для получения первого слова:

int index = s.IndexOf(' ');
if (index != -1) {
  s = s.Substring(0, index);
}

Другой способ - использовать регулярное выражение для поиска границы слова:

s = Regex.Match(s, @"(.+?)\b").Groups[1].Value;

Ответ 4

Ответ Jamiec является наиболее эффективным, если вы хотите разделить только на пробелы. Но, только ради разнообразия, здесь другая версия:

var  FirstWord = "Hello World".Split(null, StringSplitOptions.RemoveEmptyEntries)[0];

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

Обратите внимание, что он также будет считать символы как буквы, поэтому, если ваша строка Hello, world!, она вернет Hello,. Если вам это не нужно, передайте массив разделителей в первом параметре.

Но если вы хотите, чтобы он был на 100% надежным на всех языках мира, тогда он станет жестким...

Ответ 5

Бесстыдно украдено с сайта 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];
}

Ответ 6

Обрабатывает различные символы пробелов, пустую строку и строку одного слова.

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();
}

Ответ 7

Вместо Split для всей строки Ограничьте свой разделитель на счет 2. Используйте перегрузку, которая также учитывает значение параметра. Используйте String.Split Method (Char [], Int32)

string str = "hello world";
string firstWord = str.Split(new[]{' '} , 2).First();

Split всегда будет возвращать массив с хотя бы одним элементом, поэтому достаточно .[0] или First.

Ответ 8

string words = "hello world";
string [] split = words.Split(new Char [] {' '});
if(split.Length >0){
 string first = split[0];
}

Ответ 9

Я использовал эту функцию в своем коде. Он предоставляет возможность либо заглавничать первое слово, либо каждое слово.

        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;
        }
    }