C#-输入字符串的格式不正确
我正在开发一个简单的windows窗体应用程序,用户输入一个带分隔符的字符串,我解析该字符串,只从字符串中获取变量。 例如,如果用户输入:C#-输入字符串的格式不正确,c#,C#,我正在开发一个简单的windows窗体应用程序,用户输入一个带分隔符的字符串,我解析该字符串,只从字符串中获取变量。 例如,如果用户输入: 2X + 5Y + z^3 我从“方程式”中提取值2、5和3,然后简单地将它们相加 这就是我如何从字符串中获取整数值的方法 int thirdValue string temp; temp = Regex.Match(variables[3], @"\d+").Value thirdValue = int.Parse(temp); 变量只是一个字符串数组
2X + 5Y + z^3
我从“方程式”中提取值2、5和3,然后简单地将它们相加
这就是我如何从字符串中获取整数值的方法
int thirdValue
string temp;
temp = Regex.Match(variables[3], @"\d+").Value
thirdValue = int.Parse(temp);
变量
只是一个字符串数组,我用来在解析后存储字符串
但是,我在运行应用程序时遇到以下错误:
输入字符串的格式不正确
您可以将字符串更改为char数组,并检查其是否为数字,然后将其计数
string temp = textBox1.Text;
char[] arra = temp.ToCharArray();
int total = 0;
foreach (char t in arra)
{
if (char.IsDigit(t))
{
total += int.Parse(t + "");
}
}
textBox1.Text = total.ToString();
这将解决您的问题:
string temp;
temp = Regex.Matches(textBox1.Text, @"\d+", RegexOptions.IgnoreCase)[2].Value;
int thirdValue = int.Parse(temp);
我更喜欢没有正则表达式的简单轻量级解决方案:
static class Program
{
static void Main()
{
Console.WriteLine("2X + 65Y + z^3".GetNumbersFromString().Sum());
Console.ReadLine();
}
static IEnumerable<int> GetNumbersFromString(this string input)
{
StringBuilder number = new StringBuilder();
foreach (char ch in input)
{
if (char.IsDigit(ch))
number.Append(ch);
else if (number.Length > 0)
{
yield return int.Parse(number.ToString());
number.Clear();
}
}
yield return int.Parse(number.ToString());
}
}
静态类程序
{
静态void Main()
{
Console.WriteLine(“2X+65Y+z^3”.GetNumbersFromString().Sum());
Console.ReadLine();
}
静态IEnumerable GetNumbersFromString(此字符串输入)
{
StringBuilder编号=新的StringBuilder();
foreach(输入中的字符ch)
{
if(字符IsDigit(ch))
编号。追加(ch);
否则如果(number.Length>0)
{
返回int.Parse(number.ToString());
number.Clear();
}
}
返回int.Parse(number.ToString());
}
}
为什么我要让每个人都抱怨这个问题并记下来?解释正在发生的事情非常容易,提问者这样说是对的。没有什么不对的
Regex.Match(variables[3], @"\d+").Value
抛出格式不正确的输入字符串。
FormatException(如果字符串(此处为变量[3]
)不包含任何数字)当作为服务运行时,如果无法访问数组内存堆栈中的变量[3]
,它也会这样做。我怀疑这是一个BUG错误是.Value
为空,而.Match
失败
老实说,如果你问我的话,这是一个伪装成bug的特性,但它应该是一个设计特性。完成此方法的正确方法(IMHO)是返回一个空白字符串。但它们不会抛出一个格式化异常。想想看,astef
建议您甚至不要麻烦使用正则表达式,因为它会抛出异常并令人困惑。但他也被扣分了
解决这个问题的方法是使用他们也提出的这种简单的附加方法
if (Regex.IsMatch(variables[3], @"\d+")){
temp = Regex.Match(variables[3], @"\d+").Value
}
如果这仍然不适用于您,那么您不能使用正则表达式进行此操作。我在一个
c#服务中看到,这不起作用,并抛出错误。因此,我不得不停止使用Regex,请打印出temp
中的值。这可能会给你一些启发。这甚至不会编译-你能展示你真正的代码吗?(Match.Value是一个字符串
,所以你不能分配给int-temp
,等等)确切地说,你怎么能把regex-Match分配给int?对不起,这是打字错误,temp是一个字符串。@user2301717我们还需要知道变量[3]
中存储了什么,如果数字大于9:“2X+65Y+z^3”虽然我们需要更好地解释这项任务,以确保我同意。对于刚接触C#的人来说,这是一个合法的问题,而且这个答案信息量很大。