我正在用“\ 0”分隔符拆分字符串,我得到一个额外的空白尾随项目,我不知道为什么。应该有5个参数,每个参数以“\ 0”结尾。这是字符串:
Splash \ 0 \ 0Message here。\ 01Back \ 0 \ 0
这是我的代码:
page.css('span.list-item-title.restaurant-name').each do |line|
name << line.text.strip
end
这就是我收到的原因:
var paramList = new List<string>(parameters.Split("\0".ToCharArray()));
分割时我无法删除空参数,因为它们的位置很重要。
该字符串有5个参数/分隔符,但返回6个元素。位置很重要,因为[0]始终是标题,[1]是副标题,[2]是消息,[3]按钮1,[4]按钮2。
我很容易忽略最后的项目,但我想知道它为什么存在以及我做错了什么。
答案 0 :(得分:4)
使用StringSplitOptions.RemoveEmptyEntries
删除空条目
替换
var paramList = new List<string>(parameters.Split("\0".ToCharArray()));
与
var paramList = new List<string>(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));
答案 1 :(得分:3)
你没有做错任何事。没有额外的结果。它完全按照预期工作。
拆分不是为了查找由给定分隔符终止的子串,而是拆分给定分隔符处的子串。
就像切一条面包一样,如果你做了1次切割,你最终会得到2块。 如果你做两次切割,你最终得到3件。 如果你做3次切割,你最终得到4件。 等等...
你有5个剪辑(5&#34; \ 0&#34;分隔符),所以你最终会得到6个子字符串。
如果您不想要最后一个,请将其删除。有很多方法可以做到这一点!搜索&#34;从列表中删除最后一个元素&#34;,&#34;从数组中删除最后一个元素&#34;,或者您首选的容器类型。
答案 2 :(得分:1)
我很容易忽略最后的项目,但我想知道它为什么存在以及我做错了什么。
你没有做错任何事。 Split()
正在完成它在这种情况下应该做的事情。
"1,2".Split(',') -> ["1", "2"]
",".Split(',') -> ["", ""]
"1,,".Split(',') -> ["1", "", ""]
如果您的CSV文件在第一行有2个逗号,那么您认为该文件有3个标题,对吧?如果下一行只包含两个逗号,则表示有三个值,并且它们都是空字符串。同样,一个带有4个分隔符的行被认为有5个值,并且(如你的例子中)一个有5个分隔符的行被认为有7个值。
在您的情况下,字符串以'\0'
结尾的事实意味着拆分该字符串将在结尾处产生最终的空字符串,这正是您所看到的行为。
如果你希望你的输入以与你分割字符串相同的值结束,那很好:只需忽略最后一项,它应该总是为空。
答案 3 :(得分:0)
索引4和5是&#34;&#34;因为字符串以两个NUL结尾。要删除这些,您可以执行类似
的操作const char NUL = '\0';
var paramList = new List<string>(parameters.TrimEnd(NUL).Split(NUL));
我不确定你为什么要paramList
List
。 string.Split
返回一个字符串数组,应该没问题。
var params = parameters.TrimEnd(NUL).Split(NUL);
答案 4 :(得分:0)
如果您只想要前五个,请使用 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]);
}
?...
body {
display: flex;
width: 100%;
}
aside, section{
flex: 0 1 auto;
height: 100vh;
width:50vw;
-webkit-transition: all 10s linear;
transition: all 10s linear;
background-color:red;
}
aside:hover, section:hover {
width: 100vw;
}
section {background-color:black;}