C# 将字符串中的数字放入整数数组
我有像“237853494314831”这样的数字行(字符串类型)。我需要把它们放到int数组中。下面是我编写的蹩脚代码,但它不能正常工作:C# 将字符串中的数字放入整数数组,c#,C#,我有像“237853494314831”这样的数字行(字符串类型)。我需要把它们放到int数组中。下面是我编写的蹩脚代码,但它不能正常工作: int currentArrayValue=0; int currentChar=0; for (int i = 0; i < text1.Length; i++) { if (text1[i] != ' ') {
int currentArrayValue=0;
int currentChar=0;
for (int i = 0; i < text1.Length; i++)
{
if (text1[i] != ' ')
{
currentChar++;
continue;
}
else
{
for (int k = 1; k <=currentChar; k++)
{
if (k == 1) Array[currentArrayValue] = text1[i - currentChar];
else if (k == 2) Array[currentArrayValue] = text1[i - currentChar] * 10;
else if (k == 3) Array[currentArrayValue] = text1[i - currentChar] * 100;
}
currentArrayValue++;
}
}
int currentArrayValue=0;
int currentChar=0;
for(int i=0;i 对于(int k=1;k使用string.Split
代替。您可以在每个空格上拆分并获得一个数组。从那里,将每个项解析为int。实际上,您可以使用LINQ在一行中完成所有操作
int[] myInts = text1.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries)
.Select(s => int.Parse(s)).ToArray();
string input=“2378 53 4 94 32 148 31”;
var arr=Regex.Matches(输入@“\d+”).Cast()。选择(m=>int.Parse(m.Value)).ToArray();
因此,如果您有一个字符串,并且所有数字都用空格分隔
string foo = "12 34 567 120 12";
您所要做的就是使用string.Split(“”)
将该字符串拆分为一个数组,然后将这些值转换为int值
int[] intArray = foo.Split(' ').Select(x => Convert.ToInt32(x)).ToArray();
非Linq答案
const string inputVal = "23 78 53 4 94 32 148 31";
string[] splitInput = inputVal.Split(' ');
int[] inputIntArray = new int[splitInput.Length];
int counter = 0;
foreach (string split in splitInput){
inputIntArray[counter++] = int.Parse(split);
}
正如其他答案所指出的,有几种方法可以实现你想要的。如果你想进行一些安全检查,那么我会使用TryParse
:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var test = "1 2 3 x";
var values = test.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries);
var results = new List<int>();
foreach(var value in values)
{
int x;
if(Int32.TryParse(value, out x))
{
results.Add(x);
}
else
{
Console.WriteLine("{0} is not an integer", value);
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共课程
{
公共静态void Main()
{
var test=“1 2 3 x”;
var values=test.Split(新[]{''},StringSplitOptions.RemoveEmptyEntries);
var results=新列表();
foreach(值中的var值)
{
int x;
if(Int32.TryParse(值,out x))
{
结果:添加(x);
}
其他的
{
WriteLine(“{0}不是整数”,值);
}
}
}
}
它不能正常工作
不是对问题的有用描述。你希望得到什么?你得到了什么?你得到了什么?你得到了错误/异常吗?如果是,它是什么?发生在哪里?寻求调试帮助的问题(“此代码为什么不能工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。您是否可以只按空格拆分然后Convert.ToInt32()
在每一个上。你可以使用一个列表,也可以只分配一个新的长度数组,splitStringArray.length
StringSplitOptions.RemoveEmptyEntries
,以增加安全性。@DonBoitnott很好的调用。Downvoter,我想你会给出原因…使用正则表达式来实现它。Split的目的有点“过火”。但这并不意味着它错了。这只是另一种选择。。也可以像@venerik posted那样轻松处理案件……你是对的,但我觉得当回答初学者提出的问题时,提供最简单的答案是最好的选择。@JonathanCarroll然后人们不需要向上投票,但向下投票是……。为了安全,Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries)
-如果有额外的空格,仍然有效。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var test = "1 2 3 x";
var values = test.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries);
var results = new List<int>();
foreach(var value in values)
{
int x;
if(Int32.TryParse(value, out x))
{
results.Add(x);
}
else
{
Console.WriteLine("{0} is not an integer", value);
}
}
}
}