C#中的左字符串函数

left string function in C#

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

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

谢谢


你可以试试:

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

Ohad Schneider的评论是正确的,因此您可以简单地要求First()元素,因为总是至少有一个元素。

关于是否使用First()FirstOrDefault()的更多信息,您可以在这里了解更多信息。


您可以使用SubstringIndexOf的组合。

1
2
var s ="Hello World";
var firstWord = s.Substring(0,s.IndexOf(""));

但是,如果输入字符串只有一个单词,则不会给出预期的单词,因此需要特殊情况。

1
2
3
4
var s ="Hello";
var firstWord = s.IndexOf("") > -1
                  ? s.Substring(0,s.IndexOf(""))
                  : s;


一种方法是在字符串中查找空格,并使用空格的位置获取第一个单词:

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

另一种方法是使用正则表达式查找单词边界:

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

如果你只想在空格上拆分,那么jamiec的答案是最有效的。但是,为了多样化,这里有另一个版本:

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

作为一个额外的好处,它还可以识别所有类型的外来空格字符,并忽略多个连续的空格字符(实际上,它将从结果中删除前导/尾随空格)。

注意,它也会把符号算作字母,所以如果字符串是Hello, world!,它会返回Hello,。如果不需要,则在第一个参数中传递一个分隔符字符数组。

但如果你想让它在世界上的每一种语言中都100%不受干扰,那么它就会变得很难……


不知羞耻地从msdn网站上被盗(http://msdn.microsoft.com/en-us/library/b873y76a.aspx)

1
2
3
4
5
6
7
8
9
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];
}

不要对所有字符串执行Split,而是将拆分限制为2。使用以计数为参数的重载。使用string.split方法(char[],int32)

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

Split总是返回一个至少包含一个元素的数组,因此.[0]First就足够了。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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();
}

我在代码中使用了这个函数。它提供了一个选项,要么大写第一个单词,要么每个单词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        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;
        }
    }

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