我正在制作适用于g代码的Windows窗体应用程序。 基本上输入的字符串可能如下所示:
X32.2Y47Z100.5
为了首先检索每个数字,我必须找出代表数字的单个子字符串有多长。
在我的加载事件中我有这些:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
在这些行之后,语言环境本身具有价值" en-US" 但以下两个都返回false。
char.IsNumber('.');
char.IsNumber(',');
当string包含'时,convert.toDouble()也会失败。'或','。
答案 0 :(得分:3)
问题在于,您希望字符.
和,
被视为数字,而不是。当与实际数字一起使用时,它们仅被视为有效数字的一部分,并且只有当它们的位置根据当前文化正确时才被视为有效数字。
您可以使用RegEx
或string.Split
方法在x,y和z字符上拆分字符串,然后您可以使用double.TryParse
转换拆分分为双打:
private static void Main()
{
string input = "X32.2Y47Z100.5";
string[] inputParts = input.Split(new[] {'X', 'Y', 'Z'},
StringSplitOptions.RemoveEmptyEntries);
if (inputParts.Length == 3)
{
double x, y, z;
double.TryParse(inputParts[0], out x);
double.TryParse(inputParts[1], out y);
double.TryParse(inputParts[2], out z);
Console.WriteLine($"The values are: x = {x}, y = {y}, z = {z}");
}
else
{
Console.WriteLine("Input was not in a valid format.");
}
Console.WriteLine("\nDone!\nPress any key to exit...");
Console.ReadKey();
}
<强>输出强>
答案 1 :(得分:0)
使用正则表达式将所有字母替换为&#34;;&#34;
Regex.Replace(YourInputString, "[^0-9.,]", ";")
使用&#34;;&#34;
拆分结果var YourInputStringArray = YourInputString.Split(';')
删除所有空条目
YourInputStringArray = YourInputStringArray .Where(x => !string.IsNullOrEmpty(x)).ToArray();
将其转换为双倍
foreach(var inputString in YourInputStringArray)
{
if(double.TryParse(inputString, out var result)){
// Here is your double value
}
}