C# C语言中的左字符串函数#

C# C语言中的左字符串函数#,c#,string,C#,String,返回C#中字符串的第一个单词的最佳方法是什么 基本上,如果字符串是“hello world”,我需要得到“hello” 谢谢您可以使用子字符串和索引的组合 var s = "Hello World"; var firstWord = s.Substring(0,s.IndexOf(" ")); 但是,如果输入字符串只有一个单词,那么这将不会给出期望的单词,因此需要一个特殊情况 var s = "Hello"; var firstWord = s.IndexOf(" ") > -1

返回C#中字符串的第一个单词的最佳方法是什么

基本上,如果字符串是
“hello world”
,我需要得到
“hello”


谢谢

您可以使用
子字符串
索引的组合

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 s = "Hello World";
string firstWord = s.Split(' ').First();
注释是正确的,所以您可以简单地请求
First()
元素,因为始终至少有一个元素

有关是使用
First()
还是使用
FirstOrDefault()
的详细信息,您可以了解更多信息如果只想在空格上拆分,则最有效。但是,为了多样性,这里有另一个版本:

var  FirstWord = "Hello World".Split(null, StringSplitOptions.RemoveEmptyEntries)[0];
作为奖励,它还将识别并忽略多个连续的空格字符(实际上,它将从结果中删除前导/尾随空格)

请注意,它也会将符号计算为字母,因此如果您的字符串是
Hello,world,它将返回
你好,
。如果不需要,则在第一个参数中传递一个分隔符数组


但是,如果你想让它在世界上的每种语言中都100%万无一失,那么它将变得很难……

从msdn网站上无耻地窃取()


处理各种不同的空白字符、空字符串和单个单词的字符串

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();
}
私有静态字符串首字(字符串文本)
{
如果(text==null)抛出新的ArgumentNullException(“text”);
var builder=新的StringBuilder();
对于(int index=0;index}
不要对所有字符串执行
拆分
将拆分次数限制为2。使用也将count作为参数的重载。使用


Split
将始终返回至少包含一个元素的数组,因此
[0]
就足够了

我在代码中使用了这个函数。它提供了一个选项,可以选择第一个单词的大写字母,也可以选择每个单词的大写字母

        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的注释:关于标点符号呢?“hello,world”?如果字符串只包含一个单词,我会添加一个特例,例如,如果IndexOf返回-1。轻微改进:使用
字符串的重载。Split
具有最大拆分计数,因为您不关心除第一部分以外的所有内容。您不需要
FirstOrDefault
,始终至少有一个元素,因此您可以先编写
(即使没有空格,也可以得到整个字符串)。您的解决方案是正确的,不需要“尝试”。为什么要使用Linq?如果总是有一个元素,并且您使用的是第一个,那么只需通过索引器访问它:
stringfirstword=s.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();
}
string str = "hello world";
string firstWord = str.Split(new[]{' '} , 2).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;
        }
    }