簡體   English   中英

如何在空格字符上拆分一串數字並轉換為整數

[英]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();

如果您希望用戶能夠輸入空格,我們需要在拆分后修剪生成的字符串。 為此,我們可以使用另一個接受StringSplitOptionsstring.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.ParseDouble.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM