在这个问题中,我提到我正在使用包含单独integer
值的strings
,如下所示:"18 37 237"
.话虽如此,在我的程序中,我需要对这些integers
具有个人访问权限,以便我可以将它们打印到文件中。我猜最好的方法是将它们存储在一个integer array
中,其大小取决于string
中有多少ints
。
这些是我目前对这个问题的目标:
-大小integer array
基于string
中有多少ints
- 用ints
加载array
(可能使用某种Regex
方法)
我的问题是,我将如何编写这些目标?解决上述目标后,我应该可以了。
更新:为了消除混淆,我想指出我所有的字符串都包含其他非数字字符,其中大多数实际上看起来像:"SampleText 12 23 34"
。很抱歉最初没有解决这个问题。
您可能希望在使用 int 之前过滤序列。解析:
var ints = str
.Split()
.Where(x => x.All(char.IsDigit))
.Select(int.Parse)
.ToArray();
char.IsDigit
通常是一个不错的选择,但它允许所有数字,而不仅仅是拉丁数字(从 0 到 9),如果您只想允许从 0
到 9
的数字,这里是更可取的方法:
var digits = new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
var ints = str
.Split()
.Where(x => x.All(digits.Contains))
.Select(int.Parse)
.ToArray();
您可以使用以下代码:
var ints = str.Split(' ').Select(x => int.Parse(x)).ToArray();
我这样做的方法是使用 String.Split
和 int.TryParse
.
string[] strings = myString.Split( new string[]{ " " }, StringSplitOptions.RemoveEmptyEntries );
int[] ints = new int[ strings.Length ];
for( int i = 0; i < ints.Length; ++i )
{
if( !int.TryParse( strings[i], out ints[i] )
{
// error
}
}
如果你真的想要一个数组,并且你的整数总是空格分隔的:
string[] seperateInts = testString.Split(' ');
int[] intArray = new int[seperateInts.Length];
for (int i = 0; i < seperateInts.Length; i++)
int.TryParse(seperateInts[i], out intArray[i]);
列表可能是更好的解决方案:
List<int> intList = new List<int>();
foreach (string s in testString.Split(' ');
{
int parsedInt = 0;
//Avoid bad ints
if (int.TryParse(s, out parsedInt))
intList.Add(parsedInt);
}
这个正则表达式将做你所期望的
var subject = "18 37 237";
var regex = new Regex(@"d+");
var myInts = regex.Matches(subject)
.Cast<Match>()
.Select(x=> int.Parse(x.Value))
.ToArray();
string s = "18 37 SomeText 237";
string[] resultOfSplit = s.Split(' ');
List<int> intList = List<int>();
for (var i=0; i<resultOfSplit.Length;i++)
{
int temp=0;
if(Int.TryParse(resultOfSplit[i],out temp))
{
intList.Add(temp);
}
}
// Below line to convert the list to an array
int[] intArray = intList.ToArray();
因此,您需要使用 .Split() 和 .TryParse()
更新了代码以跳过数组中的非整数值