如何将字符串限制为仅第一个单词或不包括第一个分号的乐观文本?

How can I limit a string to just the first word or the text upbeat not including the first semicolon?

我有一个 字符串,其中包含如下字词:

var a = "abc";
var a = "abc;";
var a = "abc; def";
var a = "abc def";
var a = "abc; def";

有没有人对我如何创建一个新字符串有任何建议,在所有这些情况下(包括如果终止字符是句点或 a-z 和 A-Z 以外的任何字符),仅包含 "abc" ?

要在任何非字母字符后停止字符串,您可以使用此函数。

public static string limitString(string text) {

        string newString = "";

        foreach (char character in text) {

            if (Char.IsLetter(character)) {

                newString += character;

            } else {

                break;

            }

        }

        return newString;

}

用法示例:

limitString("abc; def");

将生成字符串 abc

如果你想在某些字符后停止字符串,这个函数应该可以。

public static string limitString(string text, List<char> characters) {

        foreach (char character in characters) {

            text = text.Split(character)[0];

        }

        return text;

}

用法示例:

List<char> limChars = new List<char>() { ';' };

limitString("test;", limChars);

会生成字符串 test,您还可以通过向列表中添加更多项来限制一个以上的字符。

这里有两个解决方案:

  1. 用正则表达式:

    public static string GetLettersAtTheStart(string s) {
        return Regex.Match(s, "^[a-zA-Z]+").Value;
    }
    

    此正则表达式匹配位于字符串开头的集合 [a-zA-Z] 中的所有字符。

  2. TakeWhile:

    public static string GetLettersAtTheStart(string s) {
        return string.Join("", s.TakeWhile(char.IsLetter));
    }
    

    这基本上是说,当它是一个字母时,继续从字符串中提取字符,然后用一个空字符串连接它们。

用法:

GetLettersAtTheStart("abc; def") // "abc"

一种简单的方法是使用正则表达式。您可以使用 @"^[a-zA-Z]*" 来做到这一点。您的代码可能如下所示:

string getString(String str)
{
    var regex = new Regex(@"^[a-zA-Z]*");
    return regex.Match(str).Value;
}

您还可以迭代每个字符,检查它是否来自字母顺序:

string getString2(String str)
{
    string resultString = "";
    foreach (char c in str)
    {
        if (Char.IsLetter(c))
            resultString += c;
        else
            break;
    }
    return resultString;
}

几个例子:

// Using regex, assuming English alphabet and ASCII
var a = Regex.Split("abc;abc", "[^a-zA-Z]").First();

// Using System.Linq, preferable!
var b = string.Concat("abc abc".TakeWhile(c => char.IsLetter(c)));

正如评论中提到的,您可以使用 TakeWhile。它看起来像这样:

string.Concat(a.TakeWhile(char.IsLetter))

输出总是:

abc