我是C#和编程的新手,我面临以下问题。
如何在控制台应用程序中将我作为字符串接收的给定数字拆分为整数数组?
例如:我的输入是41234
,我想将其转换为数组“ 4”,“ 1”,“ 2”,“ 3”和“ 4”。
我尝试使用标准
Console.ReadLine().Split().Select(int.Parse).ToArray();
但是它将整数设置为数组第一个索引的内容,而不是将其分割。
我也尝试过使用char []数组,但是在某些情况下,它返回char的ASCII值,而不是它代表的值。
答案 0 :(得分:5)
如果您想将每个字符都返回为整数,则可以将字符串视为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();
或者,由于我们知道非数字字符会从-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}
答案 1 :(得分:4)
但是在某些情况下,它返回char的ASCII值,而不是它表示的值。
它总是这样做(string
是char
的序列),但是如果您仅通过{{1}范围内的字符处理整数}-'0'
,您可以通过减法解决该问题:
'9'
答案 2 :(得分:2)
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);
答案 3 :(得分:0)
在C#中有很多解决方案
int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();
答案 4 :(得分:0)
此代码快照会将数字以外的所有字符替换为空白,并且仅提供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));