[英]How to return a string back to a separate class from a method that accepts integers
[英]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
類上使用幾個靜態方法:
char.IsNumber
將返回true
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值,而不是其表示的值。
它總是這樣做( string
是char
的序列),但是如果您僅通過'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.