我有以下数字,我在一行中输入控制台的空格:
4 20 3 3 1
我读了这一行并将其分配给一个字符串变量。使用ASCIIEncoding.ASCII.GetBytes()
我将字符串转换为字节数组。
如何通过删除空格并将整数添加到列表中,将字节数组拆分为整数?
例如,上述数字将转换为列表[4, 20, 3, 3, 1]
。
答案 0 :(得分:1)
修改:添加了byte[]
作为唯一问题参数的解决方案
我不知道为什么你不能只拿你的字符串来完成这些事情,但这里是一个解决方案,其中包含来自该字符串的ascii符号的字节数组。 注意任何其他非数字或空白字符和int32溢出。
List<byte[]> splitResult = new List<byte[]>();
IEnumerable<byte> bytes = new byte[] { (byte)'1', (byte)'2', (byte)' ', (byte)'5', (byte)'4', (byte)' ', (byte)' ' }; // <- this should be your bytes
while (bytes.Any())
{
byte[] oneNumberBytes = bytes.SkipWhile(x => x == ' ').TakeWhile(x => x != ' ').ToArray();
if(oneNumberBytes.Count() > 0) splitResult.Add(oneNumberBytes);
bytes = bytes.SkipWhile(x => x == ' ').SkipWhile(x => x != ' ');
}
var result = splitResult.Select(sr => sr.Aggregate(0, (seed, asciiDigit) => seed * 10 + asciiDigit - '0')).ToList();
如果可以恢复初始字符串:
使用string.Split
方法。
Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToList();
答案 1 :(得分:1)
您可以在输入字符串上调用.Split(" ")
,您将获得所需的字符串数组。
比你需要将它们转换为int。如果你确定你的输入是这样的,你可以使用linq:
string[] split = input.Split(" ");
List<int> values = split.Select(x => int.Parse(x)).ToList();
答案 2 :(得分:1)
使用Linq:
static void Main(string[] args)
{
var input = Console.ReadLine();
var integers = input.Split(new Char[] { ' ' }).Select(x => Convert.ToInt32(x)).ToList();
}