C# 在数组中存储字符串中的整数值
在中,我提到我正在处理包含独立的C# 在数组中存储字符串中的整数值,c#,arrays,wpf,string,integer,C#,Arrays,Wpf,String,Integer,在中,我提到我正在处理包含独立的整数值的字符串,例如:“18 37 237”。话虽如此,在我的程序中,我需要对这些整数进行单独访问,以便将它们打印到文件中。我猜最好的方法是将它们存储在整数数组中,大小取决于字符串中整数的数量 以下是我目前在这个问题上的目标: -根据string -使用int加载数组(可能使用某种Regex方法) 我的问题是,我将如何编码这些目标?在解决了上述目标后,我应该会没事的 更新:为了澄清混淆,我想指出,我的所有字符串都包含其他非数字字符,其中大多数实际上看起来像:“Sa
整数值的字符串,例如:“18 37 237”
。话虽如此,在我的程序中,我需要对这些整数进行单独访问,以便将它们打印到文件中。我猜最好的方法是将它们存储在整数数组中,大小取决于字符串中整数的数量
以下是我目前在这个问题上的目标:
-根据string
-使用int
加载数组
(可能使用某种Regex
方法)
我的问题是,我将如何编码这些目标?在解决了上述目标后,我应该会没事的
更新:为了澄清混淆,我想指出,我的所有字符串都包含其他非数字字符,其中大多数实际上看起来像:“SampleText 12 23 34”
。很抱歉最初没有清除此代码。您可以使用以下代码:
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[]strings=myString.Split(新字符串[]{”“},StringSplitOptions.RemoveEmptyEntries);
int[]ints=新的int[strings.Length];
对于(整数i=0;i<整数长度;++i)
{
if(!int.TryParse(字符串[i],out int[i])
{
//错误
}
}
string s=“18 37 SomeText 237”;
字符串[]resultOfSplit=s.Split(“”);
List intList=List();
对于(var i=0;i,如果您确实需要一个数组,并且您的整数总是以空格分隔的:
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]);
string[]separateInts=testString.Split(“”);
int[]intArray=新的int[separateInts.Length];
for(int i=0;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);
}
List intList=new List();
foreach(testString.Split(“”)中的字符串s);
{
int parsedInt=0;
//避免不好的干扰
if(内部锥虫(s,外部解析力))
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();
var subject=“18 37 237”;
var regex=new regex(@“\d+”);
var myInts=regex.Matches(主题)
.Cast()
.Select(x=>int.Parse(x.Value))
.ToArray();
在使用int.Parse之前,您可能希望筛选序列:
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();
如果有一个无效字符,例如一个字母,它将抛出一个异常。@Selman22:那么你是说除了整数之外还有其他字符吗?@FlatEric:isints
充当数组吗?@eric我是说如果字符串中有非数字字符,那么int.Parse方法将抛出一个异常FormatException@Eric达累斯萨拉姆之后k、 yes ints在这里是一个整数数组(只是其他语法)@Ericafterdark您不断添加注释,说明它需要处理字符串中的非整数。请更新问题,使其更具体。事实上,您的问题使字符串看起来格式良好,只包含整数。“我正在处理包含独立整数值的字符串,例如:“18 37 237”
“我需要一个临时输出变量吗?您的代码看起来很好,但我以前从未见过使用的Split()重载!@lordtakera我想,它应该是一个新字符[]{'}”
但是您想删除空条目,所以不应该只使用拆分(“”)
唯一的问题是我的字符串有其他非数字字符,例如:“Hello 23 34 23”
。对于它们,您想要0(或任何其他默认数字,比如-1)吗要添加还是应该跳过?它们应该被跳过你需要数组吗?列表对你的情况不起作用吗?想一想,那可能没问题,出于某种原因,我只是先想到数组。那意味着我不需要转换它,对吗?这甚至对包含非数字字符的字符串有效吗s、 像这样:“你好12 23 34”
?
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();