Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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行中的值_C#_String - Fatal编程技术网

C# 如何转换c行中的值

C# 如何转换c行中的值,c#,string,C#,String,输入字符串:12345 我想成为: string line = "1 2 3 4 5"; list<int>list = new list<int>(); list.Add(1); list.Add(2); list.Add(3); list.Add(4); list.Add(5); 尝试使用lambda表达式和字符串拆分 string line = "1 2 3 4 5"; List<int> li

输入字符串:12345

我想成为:

string line = "1 2     3  4          5";
list<int>list = new list<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);

尝试使用lambda表达式和字符串拆分

string line = "1 2     3  4          5";

List<int> list= line.Split(" ").Where(x => x.Trim().length > 0).Select(x => Convert.ToInt32(x)).ToList();

您可以使用正则表达式来标识文本中出现的整数。这是一个例子

这可能会被证明更可靠,这取决于您的场景,例如,您可以在其中键入任意单词/文本,但它仍然可以找到所有数字

执行此操作的C代码如下所示:

List<int> FindIntegers(string input) 
{
   Regex regex = new Regex(@"(\d+)");
   List<int> result = new List<int>();
   foreach (Match match in regex.Matches(input))  
   {
       result.Add(int.Parse(match.Value));
   }
   return result;
}

可以使用StringSplitOptions.RemoveEmptyEntries在空格上拆分行,以删除空匹配项


因此,结果将只有数字,然后您可以转换为int。

您可以将多个空格转换为单个空格,然后在“”上拆分:

或者通过以下正则表达式之一直接选择所有数字:

\d{1}   --> If the numbers will always consist of a single digit.
\d+     --> If the numbers might contain more than one digit.
像这样:

var result = new List<int>();
foreach (Match i in Regex.Matches(line, @"\d{1}")) // Or the other Regex...
{
    result.Add(int.Parse(i.Value));
}

您可以将Split方法与StringSplitOptions重载一起使用:

string line = "1 2     3  4          5";
char[] delim = {' '};
var list = line.Split(delim, StringSplitOptions.RemoveEmptyEntries)
    .Select(i => Convert.ToInt32(i)).ToList();

RevEvCETION条目将跳过空白条目,您的输出将是:

List<Int32> (5 items)
1 
2 
3 
4 
5 

有关更多信息,请参阅。

空格背后的逻辑是什么?这不会为每个试图转换为整数的空字符串引发异常吗?您不需要修剪,只需使用RemoveEmptyEntries选项Super answer分割即可。谁投了反对票!?为什么?不是我的否决票,而是String.Split不能这样使用。。。。它甚至没有编译,而且在修复了调用@bas之后,它是正确的。这将对未从拆分中删除的空字符串引发异常。@SQLPolice感谢您的意见。在我看来,在发布答案之前最好先验证答案,因为这会让提问者走上错误的轨道,特别是当其他人随机开始投票时。new char[“”]创建一个32元素的数组,其中包含零个字符。这根本不起作用。@很重要,因为只有这样反斜杠才是字面意义上的。顺便说一句,我个人觉得正则表达式通常太难读了。但从技术上来说还可以!投票给一个好的解决方案!我的输出来自使用list.Dump的LINQPad。
string line = "1 2     3  4          5";
char[] delim = {' '};
var list = line.Split(delim, StringSplitOptions.RemoveEmptyEntries)
    .Select(i => Convert.ToInt32(i)).ToList();
List<Int32> (5 items)
1 
2 
3 
4 
5