簡體   English   中英

如何將字符串號拆分為單獨的整數

[英]How to split string number into separate integers

我是C#和編程的新手,我面臨以下問題。

如何在控制台應用程序中將給定的數字(以字符串形式接收)拆分為整數數組?

例如:我的輸入是41234 ,我想將其轉換為“ 4”,“ 1”,“ 2”,“ 3”和“ 4”的數組。

我嘗試使用標准

Console.ReadLine().Split().Select(int.Parse).ToArray();

但是它將整數設置為數組第一個索引的內容,而不是將其拆分。

我也嘗試過使用char []數組,但是在某些情況下,它返回char的ASCII值,而不是它表示的值。

如果要將每個字符返回為整數,則可以將字符串視為IEnumerable<char> (它是),並且可以在char類上使用幾個靜態方法:

  1. 如果字符是數字,則char.IsNumber將返回true
  2. char.GetNumericValue將返回字符的數字值(對於非數字字符,則返回-1

例如:

int[] numbers = "123456_ABC"
    .Where(char.IsNumber)  // This is optional if you know they're all numbers
    .Select(c => (int) char.GetNumericValue(c))  // cast here since this returns a double
    .ToArray();

另外,由於我們知道非數字字符從GetNumericValue獲得-1值, GetNumericValue我們可以這樣做:

int[] numbers = "123456_ABC"
    .Select(c => (int) char.GetNumericValue(c))  // cast here since this returns a double
    .Where(value => value != -1)  // This is optional if you know they're all numbers
    .ToArray();

在上述兩種情況下, numbers變為: {1, 2, 3, 4, 5, 6}

但在某些情況下,它將返回char的ASCII值,而不是其表示的值。

總是這樣做( stringchar的序列),但是如果您僅通過'0' - '9'范圍內'0'字符處理整數,則可以通過減法來解決:

int[] values = s.Select(c => (int)(c - '0')).ToArray();

String.Split使用空格字符作為默認分隔符。 這意味着String.Split()將沿空格和換行符分割。 它不會返回單個字符。

這個表達式:

var ints = "1\n2 345".Split();

將返回 :

1 2 345

字符串是IEnumerable<char> ,這意味着您可以處理單個字符。 Char本質上是Int32,並且數字是有序的。 這意味着您可以通過減去0的值來獲取它們的值:

var ints = "12345".Select(c=>c-'0').ToArray();

甚至 :

var sum="12345".Select(c=>c-'0').Sum();
Debug.Assert(sum==15);

在C#中有很多解決方案

int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();

此代碼快照會將數字以外的所有字符替換為空白,並且僅提供int數組。

string a = "1344te12we3ta";
Regex rgx = new Regex("\\D+");
string result = rgx.Replace(a, "");
int[] intA = Array.ConvertAll(result.ToCharArray(), c => (int)Char.GetNumericValue(c));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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