如何在C# IronTesseract中动态适配运算符号实现无分支判断
解决方案
核心思路
- 从OCR识别结果里提取实际存在的运算符(+或-)
- 用该运算符分割文本得到两个数字字符串
- 通过运算符映射对应的计算逻辑,避免重复if判断
修改后的完整代码
var Ocr = new IronTesseract(); string? path = Console.ReadLine(); string[] Signs = {"+", "-"}; using (var Input = new OcrInput(path)) { var Result = Ocr.Read(Input); // 提取文本中存在的运算符 var operatorSign = Signs.FirstOrDefault(s => Result.Text.Contains(s)); if (!string.IsNullOrEmpty(operatorSign)) { Console.Clear(); string TrimmedResult = Result.Text.Trim(); // 用提取到的运算符分割字符串 string[] numbers = TrimmedResult.Split(new[] { operatorSign }, StringSplitOptions.RemoveEmptyEntries); if (numbers.Length == 2 && int.TryParse(numbers[0].Trim(), out int firstNumber) && int.TryParse(numbers[1].Trim(), out int secondNumber)) { Console.WriteLine($"{firstNumber} is the first number."); Console.WriteLine($"{secondNumber} is the second number."); // 根据运算符执行对应计算 int resultMath = operatorSign switch { "+" => firstNumber + secondNumber, "-" => firstNumber - secondNumber, _ => 0 // 兜底,实际前面判断过不会走到这 }; Console.WriteLine(resultMath); } else { Console.WriteLine("无法识别有效的数字运算式"); } } Console.ReadKey(); }
关键改进点
- 用
FirstOrDefault直接从Signs数组里找出文本中存在的运算符,简化判断逻辑 - 使用提取到的运算符分割字符串,动态获取两个数字
- 用switch表达式匹配运算符执行对应计算,代码简洁易维护
- 替换
Convert.ToInt32为int.TryParse,避免数字格式错误导致程序崩溃
内容的提问来源于stack exchange,提问作者Ahmed Sherif
相关产品推荐
相关产品推荐

