Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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# - Fatal编程技术网

C# 拆分字符串时获取额外的空白项

C# 拆分字符串时获取额外的空白项,c#,C#,我正在用“\0”分隔符拆分字符串,并得到一个额外的空白尾随项,我不知道为什么。应该有5个参数,每个参数以“\0”结尾。以下是字符串: 在此处弹出\0\0消息。\01返回\0\0 这是我的密码: var paramList = new List<string>(parameters.Split("\0".ToCharArray())); 我无法在拆分时删除空参数,因为它们的位置很重要 该字符串有5个参数/分隔符,但返回6个元素。位置很重要,因为[0]始终是标题,[1]字幕,[2]消息

我正在用“\0”分隔符拆分字符串,并得到一个额外的空白尾随项,我不知道为什么。应该有5个参数,每个参数以“\0”结尾。以下是字符串:

在此处弹出\0\0消息。\01返回\0\0

这是我的密码:

var paramList = new List<string>(parameters.Split("\0".ToCharArray()));
我无法在拆分时删除空参数,因为它们的位置很重要

该字符串有5个参数/分隔符,但返回6个元素。位置很重要,因为[0]始终是标题,[1]字幕,[2]消息,[3]按钮1,[4]按钮2


忽略最后一项对我来说很容易,但我想知道它为什么在那里以及我做错了什么。

使用
StringSplitOptions。RemoveEmptyEntries
删除空条目

替换

var paramList = new List<string>(parameters.Split("\0".ToCharArray()));
var paramList=新列表(parameters.Split(“\0.ToCharArray());

var paramList=新列表(parameters.Split(“\0.ToCharArray(),StringSplitOptions.RemoveEmptyEntries));
要仅跳过最后一个空项,请使用

var parameters = "Splash\0\0Message here.\01Back\0\0";
var splitted = parameters.Split("\0".ToCharArray());
var paramList = new List<string>(splitted.Take(splitted.Length - 1));
var parameters=“Splash\0\0此处消息。\01Back\0\0”;
var splitted=parameters.Split(“\0.ToCharArray());
var paramList=新列表(splitted.Take(splitted.Length-1));
索引4和索引5是“”,因为字符串以两个NUL结尾。要移除这些,您可以执行以下操作

const char NUL = '\0';
var paramList = new List<string>(parameters.TrimEnd(NUL).Split(NUL));
对我来说,忽略最后一项是很容易的,但我想知道它为什么在那里,我做错了什么

你没有做错什么
Split()
正是它在这种情况下应该做的事情

"1,2".Split(',') -> ["1", "2"]
",".Split(',')   -> ["", ""]
"1,,".Split(',') -> ["1", "", ""]

如果你有一个CSV文件,在第一行中有2个逗号,你会认为这个文件有3个标题,对吧?如果下一行只包含两个逗号,您会认为有三个值,它们都是空字符串。同样,带有4个分隔符的行被认为有5个值,而(在您的示例中)带有5个分隔符的行被认为有7个值

在您的例子中,字符串以
'\0'
结尾这一事实意味着拆分该字符串将在末尾生成最终的空字符串,这正是您看到的行为


如果您希望输入的值与拆分字符串的值相同,则可以忽略最后一项,该项应始终为空。

如果您只需要前五项,请使用
Take(5)

        string parameters = @"Splash\0\0Message here.\01Back\0\0";
        var paramList = new List<string>(parameters.Split(new string[] { @"\0" }, StringSplitOptions.None).Take(5));
        for(int i = 0; i < paramList.Count; i++)
        {
            Console.WriteLine(i.ToString() + ": " + paramList[i]);
        }
string parameters=@“此处有飞溅\0\0消息。\01Back\0\0”;
var paramList=new List(parameters.Split(新字符串[]{@“\0”},StringSplitOptions.None).Take(5));
for(int i=0;i
你没有做错什么。没有额外的结果。它完全按照它应该的方式工作

Split不用于查找由给定分隔符终止的子字符串,而是在给定分隔符处拆分子字符串

就像切一块面包一样,如果你切了一块,你会得到两块。 如果你切了两块,你最后会得到3块。 如果你切了3块,你最终会得到4块。 等等

您有5个切割(5“\0”分隔符),因此最终将有6个子字符串


如果你不想要最后一个,就把它拿走。有很多方法可以做到这一点!搜索“从列表中删除最后一个元素”、“从数组中删除最后一个元素”或您首选的容器类型。

没错,我不需要列表,但我无法删除最后两个\0,它们正在关闭第4个参数1Back,第5个参数为空stringSplit,不关心字符串是否结束(关闭)使用拆分字符。因此,您仍然可以执行
TrimEnd
,您将得到一个包含5项的数组。5个分隔符表示将有6个元素。如果一个字符串只有一个分隔符,那么将得到2个元素。如果只需要5个元素,则删除最后一个分隔符,这是不必要的。
var params = parameters.TrimEnd(NUL).Split(NUL);
"1,2".Split(',') -> ["1", "2"]
",".Split(',')   -> ["", ""]
"1,,".Split(',') -> ["1", "", ""]
        string parameters = @"Splash\0\0Message here.\01Back\0\0";
        var paramList = new List<string>(parameters.Split(new string[] { @"\0" }, StringSplitOptions.None).Take(5));
        for(int i = 0; i < paramList.Count; i++)
        {
            Console.WriteLine(i.ToString() + ": " + paramList[i]);
        }