[英]How to split a string of numbers on the white space character and convert to integers
我正在做一些功课,我需要从用户那里获得一个由空格分隔的单行数字输入。 我想拆分这个字符串并获取各个数字,以便我可以将它们插入二进制搜索树。
我尝试了拆分功能,并且能够摆脱空白区域,但我不确定如何“收集”个别数字。
string data;
string[] newdata = { };
Console.WriteLine("Please enter a list of integers with spaces
between each number.\n");
data = Console.ReadLine();
newdata = data.Split(null);
Console.WriteLine(String.Join(Environment.NewLine, newdata));
我想以某种方式从newdata字符串数组中收集元素并将它们转换为整数,但我很难搞清楚如何做到这一点。
好吧,你可以使用Linq .Select
方法结合.Split
方法:
List<int> newData = data.Split(' ').Select(int.Parse).ToList();
如果您希望用户能够输入空格,我们需要在拆分后修剪生成的字符串。 为此,我们可以使用另一个接受StringSplitOptions
的string.Split
方法的重载:
List<int> newData = data.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
最后,如果您希望允许用户有时输入不正确的数据并仍然获得有效的整数,您可以使用int.TryParse
并过滤掉错误解析的值:
List<int> newData = data.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)
.Select(s => int.TryParse(s.Trim(), out var n) ? (int?)n : null)
.Where(x => x != null)
.Select(i => i.Value)
.ToList();
好的代码:
var words = data.Split();
int i;
List<int> integers = new List<int>();
foreach(var s in words)
{
if (int.TryParse(s, out i)) {integers.Add(i);}
}
// now you have a list of integers
// if using decimal, use decimal instead of integer
已经提供了一些聪明的LINQ答案,这是我的扩展一步一步的解决方案,它也允许忽略无效的数字:
//Read input string
Console.Write("Input numbers separated by space: ");
string inputString = Console.ReadLine();
//Split by spaces
string[] splittedInput = inputString.Split(' ');
//Create a list to store all valid numbers
List<int> validNumbers = new List<int>();
//Iterate all splitted parts
foreach (string input in splittedInput)
{
//Try to parse the splitted part
if (int.TryParse(input, out int number) == true)
{
//Add the valid number
validNumbers.Add(number);
}
}
//Print all valid numbers
Console.WriteLine(string.Join(", ", validNumbers));
你可以这样做。
var numbers = Console.ReadLine();
var listOfNumbers = numbers.Split(new[]{" "},StringSplitOptions.RemoveEmptyEntries)
.Select(x=> Int32.Parse(x));
上面的行基于“空格”拆分用户输入,删除其间的任何空条目,然后将字符串数转换为整数。
StringSplitOptions.RemoveEmptyEntries
确保删除空条目。 空条目的示例是一个字符串,其中两个分隔符彼此相邻。 例如, "2 3 4 5"
,在2和3之间有两个空格,这意味着,当您使用空格作为分隔符拆分字符串时,最终会在数组中使用空元素。 这可以通过使用StringSplitOptions.RemoveEmptyEntries
来消除
根据您是否期望整数或小数,您可以使用Int32.Parse
或Double.Parse
(或浮点/小数等)
此外,您可以包含检查以确保您具有有效数字,否则抛出异常。 您可以按如下方式更改查询。
var listOfNumbers = numbers.Split(new[]{" "},StringSplitOptions.RemoveEmptyEntries)
.Select(x=>
{
Console.WriteLine(x);
if(Int32.TryParse(x,out var number))
return number;
else
throw new Exception("Element is not a number");
});
这可以确保列表中的所有元素都是有效数字,否则会抛出异常。
保留空格并使用空格“data.split('');”进行“拆分”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.