функция левой строки в C # - PullRequest
       1

функция левой строки в C #

18 голосов
/ 31 августа 2010

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

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

Спасибо

Ответы [ 9 ]

42 голосов
/ 31 августа 2010

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

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

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

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

23 голосов
/ 31 августа 2010

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

Один из способов - найти пробел в строке и использовать позицию пробела для получения первого слова:

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

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

s = Regex.Match(s, @"(.+?)\b").Groups[1].Value;
3 голосов
/ 31 августа 2010

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

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

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

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

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

2 голосов
/ 31 августа 2010

Бесстыдно похищен с сайта 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];
}
1 голос
/ 26 февраля 2015

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

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

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

1 голос
/ 31 августа 2010

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

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();
}
0 голосов
/ 14 октября 2017

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

        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;
        }
    }
0 голосов
/ 31 августа 2010
string words = "hello world";
string [] split = words.Split(new Char [] {' '});
if(split.Length >0){
 string first = split[0];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...