Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串添加到列表<;字符串>;_C#_Arrays_String_List_Loops - Fatal编程技术网

C# 将字符串添加到列表<;字符串>;

C# 将字符串添加到列表<;字符串>;,c#,arrays,string,list,loops,C#,Arrays,String,List,Loops,我正在研究一个方法,它接受一个字符串并将其分成许多项,然后将其存储在数组中。然后,我执行检查,查看数组是否包含两个以上的项,如果包含,我会将数组中的特定项分配给相应的字符串,即将第一项分配给名字,将最后一项分配给姓氏,将所有其他项分配给中间名 我的问题是检索数组中不是第一个或最后一个项的每个项,然后按正确的顺序将它们分配给字符串。下面您可以看到,我试图获取名称数组中的每个项,并将结果分配给一个列表,然后该列表可以转换为单个字符串,但运气不佳。我正在寻找解决这个问题的办法 public s

我正在研究一个方法,它接受一个字符串并将其分成许多项,然后将其存储在数组中。然后,我执行检查,查看数组是否包含两个以上的项,如果包含,我会将数组中的特定项分配给相应的字符串,即将第一项分配给名字,将最后一项分配给姓氏,将所有其他项分配给中间名

我的问题是检索数组中不是第一个或最后一个项的每个项,然后按正确的顺序将它们分配给字符串。下面您可以看到,我试图获取名称数组中的每个项,并将结果分配给一个列表,然后该列表可以转换为单个字符串,但运气不佳。我正在寻找解决这个问题的办法

    public string SplitName(string text)
    {
        string forename;
        string middlename;
        string surname;

        var name = text.Split(' ');

        if (name != null)
        {
            if (name.Length > 2)
            {
                forename = name[0];
                surname = name[name.Length - 1];

                List<string> temp = new List<string>();

                for (int i = 1; i < name.Length - 1; i++)
                {
                    // Assign each item to middlename
                }

                text = string.Format("{0} {1} {2}", forename, middlename, surname);
            }
        }
        else
        {
            text = "INVALID";
        }

        return text;
    }
publicstringsplitname(字符串文本)
{
字符串名;
字符串名称;
串姓;
变量名称=text.Split(“”);
if(name!=null)
{
如果(name.Length>2)
{
名字=名字[0];
姓氏=姓名[name.Length-1];
列表温度=新列表();
for(inti=1;i
这会将所有中间名添加到中间名中,中间名之间用空格分隔,并修剪最后一个空格

for (int i = 1; i < name.Length - 1; i++)
{
    middlename+=name[i]+" ";
}
middlename = middlename.Trim(); // just for sure
for(int i=1;i
如果你还需要什么,请说明你的问题

如果你的名字是

aa bb cc dd ee

midlename将是

bb cc dd

使用String.Join()

如果希望使用不同的字符串连接,请更改join(“”)的第一个参数。目前,一个名字“鲍勃·杰克·威利斯·米尔斯”将创造一个中间名“杰克·威利斯”。如果你想要“Jack,Willis”用“,”作为分隔符。

试试这个:

public string SplitName(string text)
{
    string forename;
    string middlename;
    string surname;

    var name = text.Split(' ');

    if (name != null)
    {
        if (name.Length > 2)
        {
            forename = name[0];
            surname = name[name.Length - 1];
            middlename = string.Join(" ", name.Skip(1).Take(name.Length - 2));

            text = string.Format("{0} {1} {2}", forename, middlename, surname);
        }
    }
    else
    {
        text = "INVALID";
    }

    return text;
}

但是这个返回的字符串完全相同。

首先,您需要初始化字符串变量,然后您可以将所有“中间”项附加到它

    public string SplitName(string text)
    {
        string forename = string.Empty;
        string middlename = string.Empty;
        string surname = string.Empty;

        var name = text.Split(' ');

        if (name != null)
        {
            if (name.Length > 2)
            {
                forename = name[0];
                surname = name[name.Length - 1];

                List<string> temp = new List<string>();

                for (int i = 1; i < name.Length - 1; i++)
                {
                    middlename += name[i];
                }

                text = string.Format("{0} {1} {2}", forename, middlename, surname);
            }
        }
        else
        {
            text = "INVALID";
        }

        return text;
    }
publicstringsplitname(字符串文本)
{
string forename=string.Empty;
string middlename=string.Empty;
string姓氏=string.Empty;
变量名称=text.Split(“”);
if(name!=null)
{
如果(name.Length>2)
{
名字=名字[0];
姓氏=姓名[name.Length-1];
列表温度=新列表();
for(inti=1;i
如果您只想分别保留第一个和最后一个标记,并将其他所有标记作为中间名,那么使用正则表达式会简单得多:

var regex = new Regex(@"^(\S+)\s+(?:(.*?)(?:\s+)?)(\S+)$");
var match = regex.Match("foo bar baz");

if (match.Success) {
    var firstName = match.Groups[1].Value;
    var middleName = match.Groups[2].Value;
    var lastName = match.Groups[3].Value;
}
else {
    // there were no spaces, i.e. just one token
}

正则表达式在结尾处用
\S+
匹配两行非空格字符。它可以选择使用模式
(?:(.*?)(::(.*?)(:::::::?)
,其中重要的部分是
(.*?)
(匹配任何内容,不贪婪,以避免在姓氏之前占用任何空格),其余大部分内容都是繁文缛节(不捕获组,在姓氏之前可选空格).

您有输入示例吗?发生了什么事?错误?我认为
text.Split()
永远不会返回null。如果
text
为空,它将抛出一个异常,如果为空,它将返回一个包含单个空项的数组。@Magnus,我完全忽略了这一点,多亏了提醒。@Sayse我收到了关于这个问题的多个方法的错误,因为我不知道如何实际解决这个问题,这就是为什么我要求解决这个问题。
var regex = new Regex(@"^(\S+)\s+(?:(.*?)(?:\s+)?)(\S+)$");
var match = regex.Match("foo bar baz");

if (match.Success) {
    var firstName = match.Groups[1].Value;
    var middleName = match.Groups[2].Value;
    var lastName = match.Groups[3].Value;
}
else {
    // there were no spaces, i.e. just one token
}