Левая строка в С#
Какой лучший способ вернуть первое слово строки в С#?
В принципе, если строка "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;
}
}